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

时间:2013-10-17 19:49:48

标签: json stringify

我想提供一个简单的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响应的正确方法是什么?验证者都错了吗?

2 个答案:

答案 0 :(得分:19)

来自the RFC

  

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

  JSON-text = object / array

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

所以你的选择是

  • 不使用JSON
  • 将布尔值包装在对象中:{"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); 退出;