首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSJSONSerialization解析响应数据

NSJSONSerialization解析响应数据
EN

Stack Overflow用户
提问于 2011-12-28 07:25:45
回答 3查看 6.5K关注 0票数 1

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

代码语言:javascript
复制
"[{\"Id\":1,\"Name\":\"Michael\"},{\"Id\":2,\"Name\":\"John\"}]"

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

代码语言:javascript
复制
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);
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-28 08:16:54

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

实际的JSON应该类似于:[{"Id":1,"Name":"Michael"},{"Id":2,"Name":"John"}]。没有引号,没有转义。一旦您消除了JSON对象周围的引号,您的应用程序将不再崩溃,但是对于格式错误的数据,您将得到一个JSON反序列化错误(转义)。

票数 3
EN

Stack Overflow用户

发布于 2011-12-28 07:33:40

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

来自:的

代码语言:javascript
复制
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];

To:

代码语言:javascript
复制
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError];
票数 3
EN

Stack Overflow用户

发布于 2013-10-02 06:52:51

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8650296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档