2011-01-22 26 views
1

在PHP中,您可以使用json_encode将对象编码为json字符串。JSON'正式'支持原生类型的转换吗?

$string = json_encode($some_object); 

然而,PHP有如果你在一个字符串json_encode传递在不考虑对象(整数,字符串等)数据类型的标准转换,这将返回一个包含JavaScript语句,可能是一个字符串用于定义字符串。

在不太尴尬的措辞,这

echo json_encode("Hello 
world, please don't " . '"' . "misuse quote's for emphasis " . "or possessive apostrophes' "); 

将输出这个(一个JavaScript字符串准备)

"Hello \n\tworld, please don't \"misuse quote'sor possessive apostrophes' " 

是JSON的规范这种行为的一部分?也就是说,JSON是否定义或推荐了一个实现如何处理本地,非对象,数据类型的转换?甚至有转换的意见呢?我的阅读of the RFC留下这个模糊不清,但我在解释这些事情是废话。

我问,因为我对该行为从未来版本的函数中消失的可能性感兴趣。也就是说,如果它在某个规范中被编入规范中,那么它就不太可能消失,而不是像在开发过程中想要添加的人那样。

回答

3

JSON根本不关心本地类型。它取决于JSON库的开发者或JSON如何被转换为编程语言可以使用/理解的类型。

1

你说的对啊,RFC在这个问题上还不够清楚。

一方面,链接到您提供它说上推出的第二款RFC上:

JSON可以表示四个基本类型(字符串,数字,布尔值和null)和两个结构化类型(对象和数组)。

但在当你不断的段落关于实际JSON语法它说,会谈另一方面:

一个JSON文本是一个序列化对象或数组。
JSON文本=对象/数组

因此,基于语法可以说'a string'没有资格作为有效的JSON文本。

个人而言,我宁愿看到语法“固定”的说法 JSON-text = value从而使任何false/null/true/object/array/number/string成为有效的JSON文本的。

如果你现在想要严格,我会去语法的语义。

我会发送道格拉斯克罗克福德这个问题的链接,也许他可以添加一些有用的信息。

+0

呵呵,我敢肯定Doug对他的格式很满意,但对信息+1,谢谢! – 2011-01-23 08:16:57

相关问题