【问题标题】:Does JSON 'officially' Support Conversion of Native Types?JSON 是否“正式”支持原生类型的转换?
【发布时间】:2023-04-07 03:05:01
【问题描述】:

在 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 的阅读使这变得模棱两可,但我不擅长解释这些事情。

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

【问题讨论】:

    标签: php javascript json rfc rfc4627


    【解决方案1】:

    JSON 根本不关心原生类型。 JSON 如何与编程语言可以使用/理解的类型相互转换取决于 JSON 库或功能的开发人员。

    【讨论】:

    • 好吧,我不同意。 false 是一个有效的布尔值,"false" 是一个有效的字符串。同时,"foo" 是一个有效的布尔值,foo 将是一个非法的 JSON。等等。 0 是一个整数,0.0 是一个浮点数,等等。
    【解决方案2】:

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

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

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

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

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

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

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

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

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

    【讨论】:

    • 嘿,我确信 Doug 对他的格式很满意,但是 +1 信息,谢谢!
    • 我非常尊重他,但毕竟 RFC 确实将他列为“更改控制器”,所以我想这意味着更改是可能的。
    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2014-08-30
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多