문제

JSON 형식으로 나에게 반환되는 사전 사전이 있습니다.

{
    "neverstart": {
        "color": 0, 
        "count": 0, 
        "uid": 32387, 
        "id": 73129, 
        "name": "neverstart"
    }, 
    "dev": {
        "color": 0, 
        "count": 1, 
        "uid": 32387, 
        "id": 72778, 
        "name": "dev"
    }, 
    "iphone": {
        "color": 0, 
        "count": 1, 
        "uid": 32387, 
        "id": 72777, 
        "name": "iphone"
    }
}

또한 항목에 필요한 신분증이 포함 된 NSARRAY가 있습니다. 예 : [72777, 73129

내가 할 수있는 것은 배열의 항목에 대한 id => 이름의 사전을 얻는 것입니다. 나는 이것이 배열을 반복하여 가능하다는 것을 알고 사전의 모든 값과 값을 확인하는 값을 반복하지만,이 작업을 수행하는 덜 오래 걸리는 방법이 있어야합니다.

iPhone SDK와 Objective C와 Cocoa를 배우려고 노력하면서 내 무지를 실례합니다.

도움이 되었습니까?

해결책

먼저, JSON을 사용하고 있기 때문에 이미 찾은 것입니다. bsjsonadditions 및/또는 JSON- 프레임 워크, 둘 다 JSON을 네이티 코코아 구조로 구문 분석하기위한 오픈 소스 프로젝트. 이 블로그 게시물 후자를 사용하여 JSON 문자열에서 nsdictionary를 얻는 방법에 대한 아이디어를 제공합니다.

그런 다음 문제는 사전에서 일치하는 값을 찾는 것의 하나가됩니다. 코코아 프레임 워크는 매우 강력하지만 매우 일반적이고 유연하게 설계되었습니다. 그러나 너무 많은 라인을 모으는 것은 너무 어렵지 않아야합니다 ... (iPhone에서 프로그래밍하기 때문에 빠른 열거를 사용하여 코드를 깨끗하게 만들어 줄 것입니다.)

NSDictionary* jsonDictionary = ...
NSDictionary* innerDictionary;
NSArray* requiredIDs = ...
NSMutableDictionary* matches = [NSMutableDictionary dictionary];
for (id key in jsonDictionary) {
    innerDictionary = [jsonDictionary objectForKey:key];
    if ([requiredIDs containsObject:[innerDictionary objectForKey:@"id"]])
        [matches setObject:[innerDictionary objectForKey:@"name"]
                    forKey:[innerDictionary objectForKey:@"id"]];
}

이 코드에는 오타가있을 수 있지만 개념은 건전해야합니다. 또한 전화를받습니다 [NSMutableDictionary dictionary] AutorELeased 객체를 반환합니다.

다른 팁

이 nsdictionary 방법을 사용해 보셨습니까?

+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys

Drew는 답을 얻었습니다 ... 나는 nsdictionary의 GCC 매뉴얼 내가 비슷한 질문을했을 때 다른 날에 맨발로 도움이되었습니다.

http://www.gnustep.org/resources/documentation/developer/base/reference/nsdictionary.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top