在 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
然而,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
响应的正确方法是什么?验证器都错了吗?
【问题讨论】:
【参考方案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”的正确方法是啥?