JSONKit 不反序列化不带引号的属性

Posted

技术标签:

【中文标题】JSONKit 不反序列化不带引号的属性【英文标题】:JSONKit not deserializing property without quotes 【发布时间】:2013-03-28 22:11:16 【问题描述】:

我正在尝试使用 JSONKit 和 Apple 内置的 json serlializer 将以下内容反序列化为 NSDictionary

route:"/tasks/4f9218a27e5c8f0000000000"

为什么会失败

NSDictionary *jsonDictionary = [[JSON valueForKeyPath:@"data"] objectFromJSONString];

但是,如果我在“路线”周围加上引号,它似乎确实有效,为什么?我只会在属性名称周围加上引号,但是当我发布原始字符串时,facebook 会将其去掉,所以这是不可能的。

【问题讨论】:

【参考方案1】:

原因是因为 "key":"value" 是编码 JSON 字符串的正确方法。您在应用程序中看到的 key: "value" 编码字符串通常是定义字符串的一个方便因素,因为在通过 HTTP 推送这种结构化字符串之前,它被翻译(在幕后)到 "key ":"value" 格式。

将来,如果您在使用 JSON 字符串时遇到问题并担心可能是因为 JSON 字符串格式不正确,请尝试将 JSON 字符串粘贴到 JSONlint (http://jsonlint.com/) 中。

如果你去那里尝试这个字符串,你会发现它失败了: key: "value" 如果你尝试这个,它会通过: "key": "value"

希望这会有所帮助....

编辑哇...如果我真的阅读我所写的内容,我想这会有所帮助。重点就在上面,但我一定是脑子里放了个屁,因为它很难破译。所以,这是第二次尝试哈哈..

您的第一个示例失败的原因是因为它的结构不符合 JSON 标准:

route:"/tasks/4f9218a27e5c8f0000000000"  // This is invalid...

正确的有效键/值对的键 值都用双引号括起来:

 "route" : "/tasks/4f9218a27e5c8f0000000000"   // This IS valid.

定义JSON字符串的标准可以看这里:http://www.json.org/

JSONLint 站点 (http://jsonlint.com) 是一个非常好的资源,可用于在实际使用 JSON 字符串之前快速测试它的有效性,同时也是调试可能导致解析器失败的 JSON 字符串的好方法验证测试。

我希望这个对你有帮助,呵呵..

【讨论】:

以上是关于JSONKit 不反序列化不带引号的属性的主要内容,如果未能解决你的问题,请参考以下文章

WebAPI 2不反序列化List POST请求中FromBody对象的属性

XMLSerializer 不反序列化 XML

在不反序列化的情况下操作 JSON

Xamarin REST Web 服务不反序列化

JSONKit反序列化问题

使用 jsonkit 将 JSonString 反序列化为 NSArray