PHP7 如何判断是否为json格式?
ringa_lee
ringa_lee 2017-04-11 10:33:49
[PHP讨论组]

我在网上找的一个函数:

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格式呢??
有没有靠谱的方法??
ringa_lee
ringa_lee

ringa_lee

全部回复(6)
迷茫

因为你所提供的字符串都不是标准的 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 的新特性。详情可以参考 官网说明。

伊谢尔伦

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

阿神

return json_encode($json)!==false

黄舟
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串是不是正确的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号