1

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

{route:"/tasks/4f9218a27e5c8f0000000000"}

为什么会失败

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

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

4

1 回答 1

0

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

将来,如果您遇到 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 字符串的好方法解析器验证测试。

我希望会有所帮助嘿..

于 2013-04-07T19:58:29.943 回答