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安装为Apache DSO
Oct 09 PHP
wordpress之wp-settings.php
Aug 17 PHP
php中get_object_vars()方法用法实例
Feb 08 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
PHP文件上传类实例详解
Apr 08 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
php魔术方法功能与用法实例分析
Oct 19 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
Nov 20 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
php微信开发之图片回复功能
Jun 14 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
Sep 16 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
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
PHP修改session_id示例代码
2014/01/08 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
python读取xml文件方法解析
2020/08/04 Python
python操作链表的示例代码
2020/09/27 Python
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
材料化学应届生求职信
2013/10/09 职场文书
图书室管理制度
2014/01/19 职场文书
家长会主持词
2014/03/26 职场文书
职务说明书范文
2014/05/07 职场文书
公司外出活动方案
2014/08/14 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
庆七一晚会主持词
2015/06/30 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis