我想提供一个简单的true
响应,但根据various JSON parsers,这是不有效的JSON:
true
然而,在编码和解码时,PHP和Javascript的行为类似于“{”确实是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
响应的正确方法是什么?验证者都错了吗?
答案 0 :(得分:19)
来自the RFC:
JSON文本是序列化对象或数组。
JSON-text = object / array
大多数解析器不接受任何不是对象或数组的root用户。只有不太严格的解析器才会接受您的JSON字符串只包含true
。
所以你的选择是
{"result":true}
或数组:[true]
<强>更新强>
情况发生了变化。较新版本的JSON规范(请参阅this one)明确接受任何序列化值作为文档的根目录:
JSON文本是序列化值。注意某些先前的 JSON的规范将JSON文本约束为对象或 阵列。仅生成对象或数组的实现 调用的JSON文本在所有方面都是可互操作的 实现将接受这些作为符合JSON文本。
这意味着使用布尔值作为唯一值现在在法律上是可接受的。但当然并非所有正在使用的库都会更新,这意味着使用除了对象或数组之外的任何其他库可能仍然存在问题。
答案 1 :(得分:0)
这将为您提供帮助。
console.log({item});
$ json_pss = json_decode($ json_ps,true);
print_r($ json_pss); 退出;