如何解析嵌套的JSON

时间:2014-08-10 20:40:51

标签: ios objective-c json

感谢您阅读我的帖子,我知道这个话题被问了很多次,我看到了但没有运气......

我想解析一个简单的JSON字符串,如下所示:

[
   {
      "id":"1",
      "name_en":"Photography",
      "subchannels":[
         {
            "id":"4",
            "name_en":"John"
         },
         {
            "id":"18",
            "name_en":"Sam"
         }
      ]
   },
   {
      "id":"7",
      "name_en":"Equipment",
      "subchannels":[
         {
            "id":"25",
            "name_en":"ABC Company"
         },
         {
            "id":"40",
            "name_en":"CDE Company"
         }
      ]
   }
]

它已将此字符串转换为NSDictionary

NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *testDic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&e];

然后我列出了词典键

for(id key in testDic) {
        NSLog(@"%@", key);
    }

结果是整个记录为Dictionary Key,所以我不能使用[testDic objectForKey:key]来检索值。

如何获取第一行name_en和第二行子通道值? (是否可以像XML中的xpath一样轻松检索?)

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

首先。模型的根对象是NSArray对象 - 而不是NSDictionary。 ' []'表示数组,{}表示字典。

NSArray *dataArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&e];

for (NSDictionary *entry in dataArray) {
  NSString *name = entry[@"name_en"];
  NSArray *subchannels = entry[@"subchannels"]; //array of dictionaries

  NSLog(@"Name %s", name); 

  for  (NSDictionary *subchannel in subchannels) {
     NSLog(@"Subchannels name %@ id: %d", subchannel[@"name"], [subchannel[@"id"] integerValue]);
  }
}

如果您想进行JSON解析,我建议您查看Mantle github project