Разбор JSON с Objective-C - PullRequest
       3

Разбор JSON с Objective-C

1 голос
/ 20 октября 2011

Для своего проекта я создал свой собственный API, используя PHP. Результат кодирования JSON в основном дает мне массив записей, как показано ниже

{"terms":[
           {"term0":
               {"content":"test id",
                "userid":"100","translateto":null,
                "hastranslation":"0",
                "created":"2011-10-19 16:54:57",
                "updated":"2011-10-19 16:55:58"}
               },
           {"term1":
               {"content":"Initial content",
                "userid":"3","translateto":null,
                "hastranslation":"0",
                "created":"2011-10-19 16:51:33",
                "updated":"2011-10-19 16:51:33"
               }
           }
         ]
}

Однако у меня возникли проблемы с работой с NSMutableDictionary и извлечением «контента» в Objective-C.

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];
NSMutableDictionary *JSONval = [responseString JSONValue];
[responseString release];

if (JSONval != nil) {
    NSMutableDictionary *responseDataDict = [JSONval objectForKey:@"terms"];
    if (responseDataDict!= nil) {
        for (id key in responseDataDict) {
            NSString *content = [[responseDataDict objectForKey:key]objectForKey:@"content"];
            [terms addObject:content];
            textView.text = [textView.text stringByAppendingFormat:@"\n%@", content];
        } 
        button.enabled = YES;
    }
}

}

Где NSLog выдает ошибку, когда я посылаю objectForKey в responseDataDict, который является __NSArrayM согласно журналу.

Что я тут не так сделал?

Ответы [ 2 ]

1 голос
/ 20 октября 2011

NSMutableDictionary * responseDataDict = [JSONval objectForKey: @ "Terms"];

Но значение "terms" не является словарем;это массив.Обратите внимание на квадратные скобки в вашей строке JSON.Вместо этого следует использовать:

NSArray *terms = [JSONval objectForKey:@"terms"];

.

Обратите внимание, что каждый термин в массиве является объектом (словарем), содержащим одно имя (ключ), соответствующее значение (объект) которого равнов свою очередь, другой объект (словарь).Вы должны проанализировать их как:

// JSONval is a dictionary containing a single key called 'terms'
NSArray *terms = [JSONval objectForKey:@"terms"];

// Each element in the array is a dictionary with a single key
// representing a term identifier
for (NSDictionary *termId in terms) {
    // Get the single dictionary in each termId dictionary
    NSArray *values = [termId allValues];

    // Make sure there's exactly one dictionary inside termId
    if ([values count] == 1) {
        // Get the single dictionary inside termId
        NSDictionary *term = [values objectAtIndex:0];

        NSString *content = [term objectForKey:@"content"]
        …
    }
}

Добавить дополнительную проверку по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...