在目标C:iOS中错误地解析JSON返回值

时间:2012-08-20 17:18:50

标签: objective-c ios json

{"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文件中做错了什么?提前谢谢。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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”];