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 不反序列化不带引号的属性的主要内容,如果未能解决你的问题,请参考以下文章