解析包含多个对象的JSON字符串

时间:2012-10-21 13:50:15

标签: iphone ios xcode json

我正在从网址中检索json数据。 json“string”有一个对象,其中包含多个对象,每个对象都包含自己的键,值属性......本质上,json对象是一个NSArray,包含或多或少的字典对象。我正在尝试使用NSJSONSerialization,但是没有很多关于它的文档,我似乎无法弄清楚如何以下是json可能的样子:

{"allObjects":[{"firstName":"homer","middleName":"j","lastName":"simpson"
,"address": "123 evergreen terrace","countryCode":"US","zip":12345},
{"firstName": "marge","middleName":"b","lastName":"simpson","address":
"123 evergreen terrace","countryCode":"US","zip":12345}]}

(如果重要,JSON对象包含更多条目)

我是否需要使用NSJSONSerialization来获取一个字典数组(数组为“allObjects”)?

非常感谢任何帮助!

提前致谢。

更新

此代码导致错误:

@vishy我也这么认为,但是当我运行这段代码时,

NSArray *json = [NSJSONSerialization JSONObjectWithData:geoNamesJSON options: kNilOptions error:&error];
NSDictionary *dict = [json objectAtIndex:0];
NSArray *allKeys = [dict allKeys];
NSString *key = [[NSString alloc] init];
NSEnumerator *keyEnum = [allKeys objectEnumerator];
NSLog(@"All keys in the first dictionary object:");
while(key = [keyEnum nextObject]){
    NSLog(@"%@", key);}

我收到此错误:

  

- [__ NSCFDictionary objectAtIndex:]:无法识别的选择器发送到实例0x1fd7cd10    *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ NSCFDictionary   objectAtIndex:]:无法识别的选择器发送到实例0x1fd7cd10'   * 第一次抛出调用堆栈:(0x3796c2a3 0x35c7c97f 0x3796fe07 0x3796e531 0x378c5f68 0xf310b 0xf219d 0x38ca4321 0x38cdecfd 0x38d53cc1   0x38cd86a7 0x38cd8481 0x38c52abb 0x38cc78d7 0x355b9bd9 0x3665c4b7   0x366611bd 0x3793ff3b 0x378b2ebd 0x378b2d49 0x37def2eb 0x38c91301   0xd3551 0x3c39db20)libc ++ abi.dylib:终止调用throw a   异常(lldb)

1 个答案:

答案 0 :(得分:1)

执行此步骤后,您是否在数组中获取任何值

NSArray *json = [NSJSONSerialization JSONObjectWithData:geoNamesJSON options:kNilOptions error:&error]; 

我不这么认为,因为你的json是一本字典。它应该是

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:geoNamesJSON options:kNilOptions error:&error];

有关处理json的信息,您可以按照tutorial

进行操作

编辑:使用上面的行获取json字典后以这种方式解析数据

NSArray* geoList = [geoDict objectForKey:@"geonames"];
NSLog(@"first object in geolist--%@",[geoList objectAtIndex:0]);
//each object in the array is a dictionary