在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使这个含糊不清,但我在解释这些事情时很尴尬。
我问,因为我对此行为从该函数的未来版本中消失的可能性感兴趣。即如果它在某个地方的规范中编纂,它就不太可能消失,而不是在开发过程中被认为可以添加的人。
答案 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文本。
如果你现在想要严格,我会选择语法的语义。
我会向道格拉斯·克罗克福德发送这个问题的链接,也许他可以添加一些有用的信息。