JSON“正式”支持本机类型的转换吗?

时间:2011-01-22 23:27:30

标签: php javascript json rfc rfc4627

在PHP中,您可以使用json_encode将对象编码为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使这个含糊不清,但我在解释这些事情时很尴尬。

我问,因为我对此行为从该函数的未来版本中消失的可能性感兴趣。即如果它在某个地方的规范中编纂,它就不太可能消失,而不是在开发过程中被认为可以添加的人。

2 个答案:

答案 0 :(得分:3)

JSON根本不关心本机类型。由JSON库的开发人员或函数来决定如何将JSON转换为编程语言可以使用/理解的类型。

答案 1 :(得分:1)

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

一方面,在您提供的RFC链接上,它在引言的第二段中说:

  

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

但另一方面,当你继续讨论实际JSON语法的段落时,它会说:

  

JSON文本是序列化对象或数组   JSON-text = object / array

因此,基于语法,您可以说'a string'不符合有效的JSON文本。

就我个人而言,我更愿意看到语法“固定” JSON-text = value因此使false / null / true / object / array / number / string中的任何一个成为有效的JSON文本。

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

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