我找了很长时间才得到答案但找不到任何东西。也许是因为我不知道如何问这个问题,因为我是json的新手。基本上我是一个新的ios开发人员,我正在尝试学习如何访问和使用json数据。下面是我正在使用的json的一部分:
{
"status": null,
"data": {
"1088": {
"nid": "1088",
"title": "RE 1 (2000)",
"articles": [
{
"nid": "2488",
"title": "Copyright Page"
},
...
等
我的困惑是有两个值为title
的图层。所以,当我使用类似的东西时
self.dict = [self getDictionaryFromJson];
并将json保存在字典中,然后我去使用
self.mainTitle = [self.dict objectForKey:@"title"];
它会假定给我回RE 1 (2000)
。但是我还想找回Copyright Page
的次要头衔,那么我会做self.secondaryTitle = [self.dict objectForKey:@"title"];
???
无论如何,我的困惑是我会认为它会再次给我回RE 1 (2000)
,因为呼叫没有变化,因此我不知道如何使用相同的密钥访问下一个项目。
也许我确信解决方案很简单我只是不太明白我需要做什么。
答案 0 :(得分:1)
您发布的JSON包含嵌套数组(用方括号[]
表示)和字典(用大括号{}
表示)。您可以使用NSDictionary
NSJSONSerialization
NSData *data = ... // Get JSON Data
self.dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
self.mainTitle = [[[self.dict objectForKey:@"data"] objectForKey:@"1088"] objectForKey:@"title"]
self.secondaryTitle = [[[[[self.dict objectForKey:@"data"] objectForKey:@"1088"] objectForKey:@"articles"] objectAtIndex:0] objectForKey:@"title"]
有关JSON的更多信息,您可以read the spec。
答案 1 :(得分:1)
您忽略了映射到dict
的数据的层次结构 - 记录它以进行检查。
所以,要获得第一个标题(RE 1(2000)),你会这样做:
NSString *title = [self.dict valueForKeyPath:@"data.1088.title"];
向下钻取JSON中的级别(以及字典)。同样的方法适用于更深层次的嵌套项目(尽管你不能总是使用valueForKeyPath:
,因为它不会对数组做出你期望的事情......)。