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+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
Feb 15 PHP
php SQL防注入代码集合
Apr 25 PHP
提高PHP编程效率的53个要点(经验小结)
Sep 04 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
PHP中soap的用法实例
Oct 24 PHP
smarty简单分页的实现方法
Oct 27 PHP
symfony表单与页面实现技巧
Jan 26 PHP
php控制文件下载速度的方法
Mar 24 PHP
PHP学习笔记(三):数据类型转换与常量介绍
Apr 17 PHP
Laravel中的Auth模块详解
Aug 17 PHP
php微信开发之关键词回复功能
Jun 13 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 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
smarty中js的调用方法示例
2014/10/27 PHP
Yii全局函数用法示例
2017/01/22 PHP
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
python中迭代器(iterator)用法实例分析
2015/04/29 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
jupyter notebook 多行输出实例
2020/04/09 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
为什么要用EJB
2014/04/17 面试题
考试不及格的检讨书
2014/01/22 职场文书
铁路安全反思材料
2014/12/24 职场文书
教师节倡议书2015
2015/04/27 职场文书