【问题标题】:What is the correct way to format "true" in JSON?在 JSON 中格式化“true”的正确方法是什么?
【发布时间】:2013-10-26 11:38:48
【问题描述】:

我想给出一个简单的true 响应,但是根据various JSON parsers,这是不是有效的JSON:

true

然而,PHP 和 Javascript 在编码和解码时都表现得像 "true" 对于true 来说确实是有效的 JSON:

PHP-

echo json_encode( true ); // outputs: true
echo json_decode( true ); // outputs: 1
echo gettype(json_decode( true )); // outputs: boolean

jQuery-

JSON.stringify( true );   // outputs: true
jQuery.parseJSON( true ); // outputs: true
typeof jQuery.parseJSON( true ); // outputs: boolean

那么发送格式为 JSON 的true 响应的正确方法是什么?验证器都错了吗?

【问题讨论】:

    标签: json stringify


    【解决方案1】:

    来自the RFC

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

      JSON-text = object / array
    

    大多数解析器不接受任何不是对象或数组的根。只有不太严格的解析器才会接受您的 JSON 字符串只包含 true

    所以你的选择是

    • 不使用 JSON
    • 将布尔值包装在对象中:{"result":true} 或数组:[true]

    更新:

    情况发生了变化。较新版本的 JSON 规范(请参阅 this one)明确接受任何序列化值作为文档的根:

    JSON 文本是一个序列化值。请注意,某些先前的 JSON 规范将 JSON 文本限制为对象或 大批。仅生成对象或数组的实现 要求 JSON 文本将是可互操作的,因为所有 实现将接受这些作为符合 JSON 文本。

    这意味着现在使用布尔值作为唯一值在法律上是可以接受的。但当然不是所有使用的库都更新了,这意味着使用对象或数组以外的任何东西可能仍然存在问题。

    【讨论】:

    • [true] 的形式似乎对我有用,但如果将其提供给编码/解码方法,PHP 会抛出此错误:Message : syntax error, unexpected '[', expecting ')'
    • 您使用的确切 PHP 代码是什么?如果您将引号作为文字传递,您不会忘记引号吗?
    • 啊,是的,我就是这么做的。
    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2010-11-21
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多