NSJSONSerialization 不解析这个 JSON

Posted

技术标签:

【中文标题】NSJSONSerialization 不解析这个 JSON【英文标题】:NSJSONSerialization doesn't parse this JSON 【发布时间】:2013-10-18 06:23:56 【问题描述】:

我正在尝试解析这个在我看来写得很好的 JSON,但 NSJSONSerialization 认为与 AFAIK 不同,因为它返回的是 NSArray

这是我的代码:

NSData* gamesData = [NSData dataWithContentsOfURL:
                        [NSURL URLWithString:@"http://s42sport.com/polarice/json/games.json"]
                        ];

    NSDictionary* json = nil;
    if (gamesData) 
        json = [NSJSONSerialization
                JSONObjectWithData:gamesData
                options:kNilOptions
                error:nil];
        NSLog(@"%d",json.count);
    

问题是,

JSON 有什么问题?为什么 NSSerialization 不返回我的 NSDictionary?

编辑:是的,我刚刚了解了 [...] 与 ...。谢谢你。

【问题讨论】:

那个 JSON 是一个数组。除了您期望它是一本字典之外,没有任何问题。 看看我的代码真的很适合你... 看起来你连基本的 JSON 语法都没有花太多精力。 @hawk 我的代码解决了他的要求。 @JitendraDeore 我的评论是针对原始海报的。 【参考方案1】:

通过这种方式解析你的json

NSURL * url=[NSURL URLWithString:@"http://s42sport.com/polarice/json/games.json"];

NSData * data=[NSData dataWithContentsOfURL:url];

NSError * error;

NSMutableDictionary * json=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error];

NSLog(@"%@",json);

NSArray * array1=[json valueForKey:@"c"];

NSLog(@"%@",array1);

试试这个代码。这肯定对你有用。

【讨论】:

是的,这行得通,因为选项:NSJSONReadingMutableLeaves? 请问,代码有什么不同?你现在让它返回一个 NSmutableDictionary。我以为它会返回一个 NSMutableArray 没问题,无论你想要什么,你都可以获得 NSMutableArray 取决于要求。【参考方案2】:

NSDictionnary 应该用于 Object 而 NSArray 用于 JSON 数组

NSArray* json = nil;
if (gamesData) 
    json = [NSJSONSerialization
            JSONObjectWithData:gamesData
            options:kNilOptions
            error:nil];
    NSLog(@"%d",json.count);

【讨论】:

【参考方案3】:

您列出的 JSON 文件是一个数组(它以方括号开头和结尾),因此 Objective-C 使用 NSArray 根对象反映了这一点。

【讨论】:

以上是关于NSJSONSerialization 不解析这个 JSON的主要内容,如果未能解决你的问题,请参考以下文章

NSJSONSerialization 不更新数据

使用 NSJSONSerialization 解析 twitter 搜索 json 数据

使用 NSJSONSerialization 解析 JSON - 抛出 NSException

NSJSONSerialization 与基于流的解析器

为啥 NSJSONSerialization 将 NSDictionary 错误地解析为 JSON?

NSJSONSerialization 无法解析有效的 JSON - “垃圾结束”