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安全配置方法
Jun 16 PHP
php正则校验用户名介绍
Jul 19 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
php共享内存段示例分享
Jan 20 PHP
php+ajax实现的点击浏览量加1
Apr 16 PHP
php中PDO方式实现数据库的增删改查
May 17 PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 PHP
一个非常实用的php文件上传类
Jul 04 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
php allow_url_include的应用和解释
2010/04/22 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
php实现天干地支计算器示例
2014/03/14 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
JS设计模式之惰性模式(二)
2017/09/29 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Python如何发布程序的详细教程
2018/10/09 Python
python 公共方法汇总解析
2019/09/16 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
Django多数据库联用实现方法解析
2020/11/12 Python
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
PHP开发的一般流程
2013/08/13 面试题
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
《四季》教学反思
2014/04/08 职场文书
应届生求职信范文
2014/06/30 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
行政处罚事先告知书
2015/07/01 职场文书
考试后的感想
2015/08/07 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书