1

我创建了一个 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);
    }
}
4

3 回答 3

3

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

您的实际 JSON 应如下所示[{"Id":1,"Name":"Michael"},{"Id":2,"Name":"John"}]:没有引号,没有转义。消除 JSON 对象周围的引号后,您的应用程序将不再崩溃,但随后您将收到格式错误的数据(转义)的 JSON 反序列化错误。

于 2011-12-28T00:16:54.153 回答
3

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

从:

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

至:

NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];
于 2011-12-27T23:33:39.820 回答
0

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

于 2013-10-01T22:52:51.087 回答