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设计模式 Template (模板模式)
Jun 26 PHP
关于php连接mssql:pdo odbc sql server
Jul 20 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
php 调试利器debug_print_backtrace()
Jul 23 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
教大家制作简单的php日历
Nov 17 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
laravel5.5添加echarts实现画图功能的方法
Oct 09 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
Oct 24 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 PHP
如何在PHP中读写文件
Sep 07 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 运行效率总结(提示程序速度)
2009/11/26 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
js实现数字滚动特效
2019/12/16 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Python解析json文件相关知识学习
2016/03/01 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
使用Python进行目录的对比方法
2018/11/01 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
浅谈django channels 路由误导
2020/05/28 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
商得四方公司面试题(gid+)
2014/04/30 面试题
事业单位接收函
2014/01/10 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
规范化管理年活动总结
2014/08/29 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
借条如何写
2015/05/26 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python