NSJSONSerialization解析响应数据

时间:2011-12-27 23:25:45

标签: objective-c ios ios5 nsjsonserialization

我创建了一个WCF服务,它为我的POST操作提供以下响应:

"[{\"Id\":1,\"Name\":\"Michael\"},{\"Id\":2,\"Name\":\"John\"}]"

我对JSONObjectWithData的调用没有返回任何错误,但是我无法枚举结果,我做错了什么?

NSError *jsonParsingError = nil;
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];

NSLog(@"jsonList: %@", jsonArray);

if(!jsonArray)
{
    NSLog(@"Error parsing JSON:%@", jsonParsingError);
}
else
{
    // Exception thrown here.        
    for(NSDictionary *item in jsonArray)
    {
        NSLog(@"%@", item);
    }
}

3 个答案:

答案 0 :(得分:3)

可能的原因是您使用的是错误的基础对象。尝试将NSMutableArray更改为NSDictonary。

发件人:

NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];

NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];

答案 1 :(得分:3)

正如Jeremy指出的那样,你不应该逃避JSON数据中的引号。但是,你已经引用了返回字符串。这使它成为一个JSON字符串,而不是一个对象,所以当你解码它时你有一个字符串,而不是一个可变数组,这就是为什么当你试图快速迭代时你得到一个错误......你不能快速迭代字符串。

您的实际JSON应如下所示:[{"Id":1,"Name":"Michael"},{"Id":2,"Name":"John"}]。没有报价,没有逃脱。一旦消除了JSON对象周围的引号,您的应用程序就不会再崩溃,但是对于格式错误的数据(转义),您将获得JSON反序列化错误。

答案 2 :(得分:0)

使用NSJSONSerialization进行解析很容易,但我还创建了一个小框架,允许将JSON值直接解析为类对象,而不是处理字典。看一看,它可能会有所帮助: https://github.com/mobiletoly/icjson