PHP7 如何判断是否为json格式?

我在网上找的一个函数:

function is_json($string) 
{
 json_decode($string);
 return (json_last_error() == JSON_ERROR_NONE);
}

$str = '{id:23,name:"test"}';
$str = "{'id':23,'name':'test'}";
为什么在PHP7,均不是合法的json格式呢??
有没有靠谱的方法??
阅读 13.1k
7 个回答

因为你所提供的字符串都不是标准的 JSON, 正确的 JSON 所有 key 都是使用 双引号 包裹的字符串。更多的 JSON 规范可以看 JSON官网
你可以试试:

function is_json($string) 
{
 json_decode($string);
 return (json_last_error() == JSON_ERROR_NONE);
}

$str = '{"id":23,"name":"test"}';
var_dump(is_json($str));

而在 PHP 各版本表现不一致是因为 PHP 换了 JSON 的底层实现,现在版本对 JSON 的要求更标准了。
准确来说,这不是 PHP7 的特性,而是 PHP 5.6 的新特性。详情可以参考 官网说明

return json_encode($json)!==false

JSON的格式,key与value都必须是双引号……

var arr = {id:23,name:'test'}; //键名不用引号,值用单引号,在JS中,这样写都合法
alert(JSON.stringify(arr)); //但合法的JSON字符串应该是stringify后的模样 {"id":23,"name":"test"}

console.log(JSON.parse('{"id":23,"name":"test"}')); //正确
console.log(JSON.parse("{id:23,name:'test'}"));     //错误
//PHP的json_decode跟JSON.parse一样不能识别 {id:23,name:'test'} 这种JSON字符串.

PHP7 采用了更严格的JSON规则,单引号已经不再能够用于引用和字段名。

可以使用在线json检测工具先试试自己的json串是不是正确的

你还是先了解一下什么是json字符串吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题