0
{"Overviews":
    [
     {"AAAA": [
               {"Generala": "sometext",
                "Generalb": "sometext",
                "Generalc": "sometext"}
              ],
     "BBBB": [
               {"Generala": "sometext",
                "Generalb": "sometext",
                "Generalc": "sometext"}
              ]
      }
     ]
 }

嗨,我使用 SBJson 来解析这个 json。当我分配 NSArray *json = [jsonObject valueForKey:@"Overviews"];。数据的层次结构并不顺利。我使用了一个 NSDictionary、2 个 NSArray 和 1 个 NSString 来解析 Generala。

我的目标是像这样解析数据“Generala”:

NSDictionary *data = [overviews valueForObject:@"AAAA"];
NSString *generals = [data valueForObject:@"Generala"];

我在 json 文件中做错了什么?提前致谢。

4

3 回答 3

2

你那里有多余的数组。Overviews 是一个数组,其中一个元素位于 - 字典中。它应该只是字典。这同样适用于 AAAA 和 BBBB - 它们是包含单个字典的数组,而它们应该只是字典。

基本上,只需删除 JSON 中的所有方括号。

于 2012-08-20T17:26:42.417 回答
1

您的源是一个条目的字典,该条目包含一个条目的数组,该条目包含两个条目的字典,每个条目包含一个条目的数组,该条目包含三个条目的字典。

我怀疑这正是 JSON 解析器解析它的方式。

于 2012-08-20T17:40:25.373 回答
1
NSArray *dataArray = [overviews objectForKey:@"AAAA"];
NSDictionary *dataDict = [dataArray objectAtIndex:0];
NSString *generals = [dataDict objectForKey:@"Generala"];

这将使您获得正确的值,但是正如您所看到的,我必须“硬编码”索引“0”。您可能需要一些逻辑来访问特定的数组。

或将您的 json 更改为:

{"Overviews":
     {"AAAA":
               {"Generala": "sometext",
                "Generalb": "sometext",
                "Generalc": "sometext"},
     "BBBB":
               {"Generala": "sometext",
                "Generalb": "sometext",
                "Generalc": "sometext"}
      }
}

并使用: NSDictionary *dataDict = [overviews objectForKey:@"AAAA"]; NSString *string = [dataDict objectForKey:@"Generala"];

于 2012-08-20T19:52:03.837 回答