使用NSDictionary访问NSJSONSerialization数据

时间:2012-03-17 20:00:53

标签: ios json serialization

我正在尝试使用NSJSONSerialization来检索JSON数据,问题是我无法正确解析NSDictionary。

webservice返回以下内容:

  

[{“状态”:“无变量”}]

我的代码如下所示:

...
NSURL * url = [NSURL URLWithString:@"http://justforexamplepurposes.xyz/file.php"];
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[[NSString stringWithFormat:@"username=%@&password=%@", username, password] dataUsingEncoding:NSUTF8StringEncoding]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if(error == nil && result != nil)
{
    NSError * json_error = nil;
    id id_json_serialization = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingMutableContainers error:&json_error];
    if(json_error == nil)
    {
        NSDictionary * dictionary_result = (NSDictionary *) id_json_serialization;
        NSLog(@"|>%@<|", dictionary_result);
        NSEnumerator * enume;
        id key;
        enume = [dictionary_result keyEnumerator];
        while((key =[enume nextObject]))
        {
            NSLog(@"%@ : %@", key, [dictionary_result objectForKey:key]);
        }
    }
}
...

第一个NSLog正确打印:

  

|&GT;(           {           Status =“无变量”;       })&lt; |

但是在第二个NSLog,它会引发异常:

  

2012-03-17 13:57:22.195 TESTAPP [41072:f803] - [__ NSArrayM   keyEnumerator]:无法识别的选择器发送到实例0x689a9f0   2012-03-17 13:57:22.196 TESTAPP [41072:f803] *终止应用程序   未捕获的异常'NSInvalidArgumentException',原因:' - [__ NSArrayM   keyEnumerator]:无法识别的选择器发送到实例0x689a9f0'   * 第一次抛出调用堆栈:(0x13e9022 0x157acd6 0x13eacbd 0x134fed0 0x134fcb2 0x2a80 0x13eae99 0x3614e 0x360e6 0xdcade 0xdcfa7 0xdc266   0x5b3c0 0x5b5e6 0x41dc4 0x35634 0x12d3ef5 0x13bd195 0x1321ff2   0x13208da 0x131fd84 0x131fc9b 0x12d27d8 0x12d288a 0x33626 0x232d   0x2295)终止调用抛出异常(lldb)

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

服务器返回的JSON实际上是一个只包含一个对象的数组。所以你的变量dictionary_result实际上是一个NSMutableArray。

快速提示:如果您使用CFShow(dictionary_result)而不是NSLog(@"|>%@<|", dictionary_result);,您可能已经发现了这一点,因为CFShow会为您提供有关您的对象的更多信息,包括类型。