PHP处理JSON字符串key缺少双引号的解决方法


Posted in PHP onSeptember 16, 2014

本文实例讲述了PHP处理JSON字符串key缺少引号的解决方法,分享给大家供大家参考之用。具体方法如下:

通常来说,JSON字符串是key:value形式的字符串,正常key是由双引号括起来的。

例如:

<?php
$data = array('name'=>'fdipzone');
echo json_encode($data);            // {"name":"fdipzone"}
print_r(json_decode(json_encode($data), true)); //Array ( [name] => fdipzone )
?>

但如果json字符串的key缺少双引括起来,则json_decode会失败。

<?php
$str = '{"name":"fdipzone"}';
var_dump(json_decode($str, true)); // array(1) { ["name"]=> string(8) "fdipzone" }

$str1 = '{name:"fdipzone"}';
var_dump(json_decode($str1, true)); // NULL
?>

解决方法:判断是否存在缺少双引括起来的key,如缺少则先用正则替换为"key",再进行json_decode操作。

<?php
/** 兼容key没有双引括起来的JSON字符串解析
* @param String $str JSON字符串
* @param boolean $mod true:Array,false:Object
* @return Array/Object
*/
function ext_json_decode($str, $mode=false){
  if(preg_match('/\w:/', $str)){
    $str = preg_replace('/(\w+):/is', '"$1":', $str);
  }
  return json_decode($str, $mode);
}

$str = '{"name":"fdipzone"}';
var_dump(ext_json_decode($str, true)); // array(1) { ["name"]=> string(8) "fdipzone" }

$str1 = '{name:"fdipzone"}';
var_dump(ext_json_decode($str1, true)); // array(1) { ["name"]=> string(8) "fdipzone" }
?>

希望本文所述对大家PHP程序设计的学习有所帮助。

PHP 相关文章推荐
如何在PHP中使用Oracle数据库(3)
Oct 09 PHP
PHP连接access数据库
Mar 27 PHP
FCKeditor添加自定义按钮
Mar 27 PHP
php学习之数据类型之间的转换代码
May 29 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 PHP
PHP多进程通信-消息队列使用
Mar 08 PHP
phpstudy2020搭建站点的实现示例
Oct 30 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 #PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
Sep 12 #PHP
php修改指定文件后缀的方法
Sep 11 #PHP
MyEclipse常用配置图文教程
Sep 11 #PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 #PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 #PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 #PHP
You might like
一个简单的PHP入门源程序
2006/10/09 PHP
PHP clearstatcache()函数详解
2010/03/02 PHP
php实现两个数组相加的方法
2015/02/17 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
2017/02/23 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
pandas对指定列进行填充的方法
2018/04/11 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
佳能法国商店:Canon法国
2019/02/14 全球购物
内部类的定义、种类以及优点
2013/10/16 面试题
现场施工员岗位职责
2014/03/10 职场文书
专项法律服务方案
2014/06/11 职场文书
装修活动策划方案
2014/08/27 职场文书
2014年实习生工作总结
2014/11/27 职场文书
刮痧观后感
2015/06/05 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫
win7配置本地ftp服务器的图文教程
2022/08/05 Servers