2

在 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 是否定义或建议实现应如何处理本机、非对象、数据类型的转换?或者甚至对转换有意见?我对 RFC的阅读使这变得模棱两可,但我在解释这些事情时很糟糕。

我问是因为我对这种行为从该函数的未来版本中消失的可能性感兴趣。即,如果它被编入规范中的某个地方,那么它消失的可能性要小于有人认为在开发过程中添加的一个。

4

2 回答 2

3

JSON doesn't care about native types at all. It is up to the developer of the JSON library or functionality as to how the JSON is translated to and from types that the programming language can use/understand.

于 2011-01-22T23:31:24.523 回答
1

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

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

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

但另一方面,当您继续阅读有关实际 JSON 语法的段落时,它会说:

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

因此,根据语法,您可以说它'a string'不符合有效 JSON 文本的条件。

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

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

我将向 Douglas Crockford 发送此问题的链接,也许他可以添加一些有用的信息。

于 2011-01-23T07:46:07.840 回答