PHP处理JSON字符串key缺少双引号的解决方法

5年以前  |  阅读数:284 次  |  编程语言:PHP 

本文实例讲述了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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
将二进制数据转为16进制以便显示
获取IMSI
获取IMEI
Java生成UUID
PHP自定义函数获取搜索引擎来源关键字的方法
让你成为最历害的git提交人
在Zeus Web Server中安装PHP语言支持
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Yii2汉字转拼音类的实例代码
Python 2与Python 3版本和编码的对比
php+ajax+json 详解及实例代码
php封装的page分页类完整实例
PHP设计模式之工厂模式与单例模式
php数组合并array_merge()函数使用注意事项
PHP实现简单爬虫的方法
php实现数组中索引关联数据转换成json对象的方法
wget使用技巧