感谢您阅读我的帖子,我知道这个话题被问了很多次,我看到了但没有运气......
我想解析一个简单的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一样轻松检索?)
感谢您的帮助。
答案 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。