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 批量生成html,txt文件的实现代码
Jun 26 PHP
php中的比较运算符详解
Oct 28 PHP
php json与xml序列化/反序列化
Oct 28 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
Nov 27 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
php 获取文件行数的方法总结
Oct 11 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
May 30 PHP
php+laravel依赖注入知识点总结
Nov 04 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 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
中国第一家无线电行
2021/03/01 无线电
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
供参考的 php 学习提高路线分享
2011/10/23 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
php使用CURL伪造IP和来源实例详解
2015/01/15 PHP
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
原生JS轮播图插件
2017/02/09 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
Python中集合类型(set)学习小结
2015/01/28 Python
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
Python中设置变量访问权限的方法
2015/04/27 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python中的json总结
2018/10/11 Python
Python玩转Excel的读写改实例
2019/02/22 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
介绍Ibatis的核心类
2013/11/18 面试题
公司庆典活动邀请函
2014/01/09 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
团支部推优材料
2014/05/21 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2015年班组长工作总结
2015/04/10 职场文书
法律进社区活动总结
2015/05/07 职场文书
实习单位鉴定意见
2015/06/04 职场文书