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 相关文章推荐
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
50个PHP程序性能优化的方法
Jun 02 PHP
php curl登陆qq后获取用户信息时证书错误
Feb 03 PHP
thinkPHP自定义类实现方法详解
Nov 30 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
May 17 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
javascript连续赋值问题
2015/07/08 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
vue实现评价星星功能
2020/06/30 Javascript
Python命名空间的本质和加载顺序
2018/12/17 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Django 开发环境配置过程详解
2019/07/18 Python
python反转列表的三种方式解析
2019/11/08 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
成人教育自我鉴定
2013/11/01 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
电子信息工程自荐信
2014/05/26 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript