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 05 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
php使用curl检测网页是否被百度收录的示例分享
Jan 31 PHP
PHP扩展开发入门教程
Feb 26 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
Apr 08 PHP
在Laravel 的 Blade 模版中实现定义变量
Oct 14 PHP
基于PHP实现生成随机水印图片
Dec 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与javascript对多项选择的处理
2006/10/09 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
2019/04/08 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
Django框架下在视图中使用模版的方法
2015/07/16 Python
简单谈谈Python中的闭包
2016/11/30 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
详解Python做一个名片管理系统
2019/03/14 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
C语言基础笔试题
2013/04/27 面试题
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
巾帼志愿者活动方案
2014/08/17 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
《将心比心》教学反思
2016/02/23 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
MySql新手入门的基本操作汇总
2021/05/13 MySQL