сложный анализ JSON с использованием Objective-C - PullRequest
1 голос
/ 19 апреля 2011
{
   "Flight1":{
      "3":{
         "id":"10",
         "name":"JumboJet1B",
         "level":"1",
         "category":"1",
         "energy":"10",
         "bonus":"10",
         "completed":0
      },
      "4":{
         "id":"10",
         "name":"JumboJet1B",
         "level":"1",
         "category":"1",
         "energy":"10",
         "bonus":"10",
         "completed":0
      }
   }
}

Это был вывод json

Как я могу разобрать внутри пунктов 3 и 4, скажем, получить идентификатор, энергию и имя

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Если порядок внутри Flight1 не имеет значения, должно работать следующее:

NSDictionary *flights = … // result from a JSON parser
NSDictionary *flight1 = [flights objectForKey:@"Flight1"];

for (NSString *key in [flight1 allKeys]) {
    NSDictionary *flight1Entry = [flight1 objectForKey:key];

    NSString *entryId = [flight1Entry objectForKey:@"id"];
    NSString *entryName = [flight1Entry objectForKey:@"name"];
    NSString *entryEnergy = [flight1Entry objectForKey:@"energy"];

    …
}

В противном случае, если вы хотите, чтобы ключи были отсортированы по их числовому значению:

NSDictionary *flights = … // result from a JSON parser
NSDictionary *flight1 = [flights objectForKey:@"Flight1"];
NSArray *flight1Keys = [[flight1 allKeys] sortedArrayUsingComparator:^(id o1, id o2) {
    NSInteger i1 = [o1 integerValue];
    NSInteger i2 = [o2 integerValue];
    NSComparisonResult result;

    if (i1 > i2) result = NSOrderedDescending;
    else if (i1 < i2) result = NSOrderedAscending;
    else result = NSOrderedSame;

    return result;
}];

for (NSString *key in flight1Keys) {
    NSDictionary *flight1Entry = [flight1 objectForKey:key];

    NSString *entryId = [flight1Entry objectForKey:@"id"];
    NSString *entryName = [flight1Entry objectForKey:@"name"];
    NSString *entryEnergy = [flight1Entry objectForKey:@"energy"];

    …
}
0 голосов
/ 19 апреля 2011

Предполагая, что вы используете json framework , вы можете получить к нему доступ следующим образом:

NSDictionary *jsonDict = [jsonString JSONValue];

NSString *id = [[[jsonDict objectForKey:@"Flight1"] objectForKey:@"3"] objectForKey:@"id"];

Это предполагает много, так что используйте try, кроме блоков или итерируя по различным уровням.

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