Как вытащить вложенные значения JSON в коллекцию в target-C? - PullRequest
1 голос
/ 27 мая 2011

У меня есть служба OData, которая может возвращать значения JSON для коллекции объектов.Я хотел бы указать приложению iPhone на коллекцию объектов JSON вне этой службы (результаты показаны ниже с одним примером записи).

Как можно проанализировать эти вложенные значения? КогдаЯ преобразую строку ответа в значения JSON, она захватывает только «d» (мой код для этого также приведен ниже).

{
"d" : {
"results": [
{
"__metadata": {
"uri": "http://someserver/service.svc/collection(1234L)", "type": "My.Namespace.Type"
}, "Property1": "value1", "Property2": 7274, "Collection1": {
"__deferred": {
"Property3": "http://someserver/service.svc/collection(1234L)/Images"
}
}
},
...

Пример кода цели C:

- (void)requestFinished:(ASIHTTPRequest *)request
{
    if (request.responseStatusCode == 200)
    {
        NSString *responseString = [request responseString];

        textView.text = responseString;

        NSDictionary *responseDict = [responseString JSONValue];
        NSArray *keys = [responseDict allKeys];

        [self printArray:keys]; // This prints "d"
        ...
     }
}

Ответы [ 4 ]

2 голосов
/ 27 мая 2011

Кажется, у вас есть корневой ключ "d", и все ключи на самом деле являются подразделами, попробуйте

NSDictionary *responseDict = [[responseString JSONValue] objectForKey:@"d"];

или даже

NSArray *responseArray = [[[responseString JSONValue] objectForKey:@"d"] objectForKey:@"results"];

это чередование NSArray и NSDictionnary:

NSDictionary *responseDict = [[responseString JSONValue] valueForKey:@"d"];
NSArray *responseArray = [responseDict valueForKey:@"results"];

NSDictionary *dict;
for(int i=0; i< [responseArray count]; i++){
    dict = [responseArray objectAtIndex:i];
    NSLog(@"- %@",[responseArray objectAtIndex:i]);

}

это всегда сильно зависит от вашего генератора JSON . Так что я не могу сказать вам наверняка, что это всегда лучший способ копать, но в этом случае это так. Просто помните:

  • [данные1, данные2, данные3, данные4] -> массив
  • {ключ1: данные1, ключ2: данные2} -> словарь
1 голос
/ 27 мая 2011

Судя по всему, d - это ключ к другому словарю, который содержит ключ results, который содержит массив с вашими данными.Попробуйте использовать

NSLog(@"%@", responseDict);

, чтобы увидеть всю иерархию дерева.

0 голосов
/ 27 мая 2011
0 голосов
/ 27 мая 2011

Вы можете использовать json-framework для преобразования данных json в NSDictionary.

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