当前位置: 首页 > 编程笔记 >

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

薛征
2023-03-14
本文向大家介绍PHP处理JSON字符串key缺少双引号的解决方法,包括了PHP处理JSON字符串key缺少双引号的解决方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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程序设计的学习有所帮助。

 类似资料:
  • 问题内容: 我通常使用以下代码来解析JSON字符串: 当数据如下所示时,效果很好: 突然之间,当输入其他数据时,我遇到了问题。解析失败,并且在调试时,我发现该字符串如下所示: 显然,我得到双引号内的JSON字符串。2个简短的问题:1)这是否正常,并且JSONObject应该能够解析它吗?2)如果不是,建议的处理方式是什么? 问题答案: 这似乎是JSON生成中的错误。JSON实际上应该在此处引发解析

  • 本文向大家介绍解析错误富文本json字符串(带双引号)的快速解决方法,包括了解析错误富文本json字符串(带双引号)的快速解决方法的使用技巧和注意事项,需要的朋友参考一下 公司的项目,通过json传回来的是这么个东西: 各种查询之后发现无法解析的根本原因就是里面有双引号" " "和反斜杠" \ ". 还不能直接对json进行转义,否则会将json本身自带的双引号都给转义了,所以不能暴力转义 上网找

  • 本文向大家介绍替换php字符串中的单引号为双引号的方法,包括了替换php字符串中的单引号为双引号的方法的使用技巧和注意事项,需要的朋友参考一下 实例如下: 以上这篇替换php字符串中的单引号为双引号的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 这是我的Json代码的示例: 如果我在程序中打印出该属性,则会得到以下输出: 如您所见,它保留了双引号。 有什么办法可以避免这种情况吗? 我的完整代码: java代码将其打印出来: 我的完整Java代码 我的Java程序的输出: 问题答案: 它的文档记录不正确,但是会为您提供一个表示JSON元素的字符串,并且适合于重新创建JSON序列化。你想要的是。如果您不查看字符串,这将引发错误,但

  • 下面是JSON字符串: 为了在java对象中反序列化这个字符串,我必须删除\,这可以使用string replace方法来完成。除此之外,在[和]之前还有双引号。我如何删除这些双引号或允许它们时,反序列化使用杰克逊。

  • 问题内容: 我正在使用Newtonsoft.Json将对象解析为json字符串。它返回这样的想法: 我认为这不是有效的json字符串,任何人都可以解决我的问题? 我想要的是这样的: 编辑:这是来自响应字段TextView的实际json,我可以看到: 情况是这样的:我将序列化的json字符串放在Web api CreateResponse方法中。我可以在fidder中看到响应字符串,就像我在无效的j