在 JSON 中格式化“true”的正确方法是啥?

Posted

技术标签:

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

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

true

然而,phpjavascript 在编码和解码时都表现得像 "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 响应的正确方法是什么?验证器都错了吗?

【问题讨论】:

【参考方案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 代码是什么?如果您将引号作为文字传递,您不会忘记引号吗? 啊,是的,我就是这么做的。

以上是关于在 JSON 中格式化“true”的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中从 json 文件中读取数据的正确方法是啥?

VSCODE 使用“editor.unicodeHighlight.allowedCharacters”在 setting.json 编辑器屏幕中输入允许字符的正确格式是啥

C# 中解析此日期格式“Mon Oct 07 00:00:00 EDT 2013”​​的正确方法是啥?

在json模式中定义键值对的正确方法是啥

在 Dart 中使用 json_serializer 将映射序列化为 JSON 的正确方法是啥?

JSON-LD:报告模式类型的正确语法是啥?