NSJSONSerialization 给我错误“重复键”

Posted

技术标签:

【中文标题】NSJSONSerialization 给我错误“重复键”【英文标题】:NSJSONSerialization gives me error "Duplicate key" 【发布时间】:2012-03-25 09:37:58 【问题描述】:

我请求家庭控制设备的 JSON 响应:

NSData* responseData = [NSData dataWithContentsOfURL:url];

responseData中的JSON数据完整有效。但是,如果我尝试

NSDictionary* dict = [NSJSONSerialization 
                          JSONObjectWithData:responseData                          
                          options:kNilOptions 
                          error:&error];
NSLog("Error: %@", error);

它给了我以下错误:

错误:错误域=NSCocoaErrorDomain 代码=3840“操作无法完成。(Cocoa 错误 3840。)”(字符 0 周围对象的重复键。) UserInfo=0x6a8b8e0 NSDebugDescription=字符周围对象的重复键0.

我搜索了网络,但到目前为止找不到任何有用的东西。


编辑:JSON响应很长,所以不要在这里发布,请找到它here。

【问题讨论】:

如果显示使用 JSON 字符串会更容易。 【参考方案1】:

通过将 JSON 粘贴到 http://jsonformat.com/ 中,它看起来很好 - 也许您发现了 Apple 错误?另一种尝试验证的方法是使用第三方 ios 库,看看它是否会给您同样的错误?说,TouchJSON?

【讨论】:

谢谢! TouchJSON 为我工作,我将此事件报告给了 Apple。【参考方案2】:

我得到了同样的错误,只是在应用程序运行时随机出现。当 NSJSONSerialization 失败时,我使用 JSON 查看器检查了它阻塞的 json 对象。 JSON 总是可以的。 NSJSONSerialization 被多次调用时的错误?

【讨论】:

我已经切换到 TouchJSON,到目前为止它做得很好。试试看! :)【参考方案3】:

我遇到了同样的错误。我的 JSON 数据在 http://jsonformatter.curiousconcept.com/ 处通过了 JSON 验证器。但是,我在我的 JSON 中发现了两个重复的键(在字典的末尾)。删除这些键后, NSJSONSerialization 工作顺利。

【讨论】:

JSON 没有定义如何处理重复键。任何将 JSON 放入 NSDictionary 的东西都不可能以有意义的方式处理它们。

以上是关于NSJSONSerialization 给我错误“重复键”的主要内容,如果未能解决你的问题,请参考以下文章

NSJSONSerialization 不更新数据

NSJSONSerialization 没有返回错误

Swift 2 - NSJSONSerialization.JSONObjectWithData 处理错误 [重复]

iOS:NSJSONSerialization:错误的代码或错误的 JSON 结构?

cocoa错误3840 NSJSONSerialization的解决方法

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