php取json值带双引号,关于php中解析json时值中包含双引号的问题

本文探讨了在处理JSON数据时,误使用stripcslashes函数导致的反斜线与双引号问题,这可能会破坏JSON结构。通过正则表达式尝试修复已损坏的数据,但未成功。预防此类问题的最佳做法是在解析JSON前避免使用stripcslashes。推荐使用在线JSON校验工具确保数据正确性。
摘要由CSDN通过智能技术生成

首先写在前面,以下内容都是在讨论json中的 \" 结构。 \" 反斜线+双引号 在json是一个正常的结构体!

我有一个比较大的json格式数据,是通过接口拿到的,在拿到之后,我的代码中对这段json进行了去掉反斜线的解析:

$json = callApi($url);

$json = stripcslashes($json);

$result = json_decode($json);

此时如果数据源json中包含有\"这样的字符时,此时经过stripcslashes"加工“之后是无法再得到正确的json格式的,也就是变成了脏数据。

所以我企图用正则表达式匹配到所有这其中被去掉了反斜线孤零零的双引号:

$json_like = '{"key0":要"123123123,"key1":23.4,"key2":wokao"kao,"key3":18"分3}';

$result = preg_match_all('/([^{}:,\]]"[^{}:,\]])/', $json_like, $matchs);

echo '

';print_r($matchs);exit;

这里是观察到了json中的这样的规律:双引号左右必定包含这么几个字符:'{' , '}', '[', ']', ':', ',' 这样就能寻找到json数据中非法的双引号,但是却无法替换,总之到这里我就无法替换了,所以对于已经被stripcslashes过的json数据,已经彻底脏了无法还原。

其实下面的json格式是正确的:

$json_like = '{"key0":"要\"123123123","key1":23.4,"key2":"wo\"kao","key3":"18\"分3"}';

json的key:value的value中如果含有双引号的时候,json会自动为双引号添加反斜线,现在你对这个字符串进行json_decode,解析之后的数组是这样的:

Array

(

[key0] => 要"123123123

[key1] => 23.4

[key2] => wo"kao

[key3] => 18"分3

)

可以看到反斜线已经被去掉。

之后我们再对这个数组进行json_encode,得到结果:

{"key0":"\u8981\"123123123","key1":23.4,"key2":"wo\"kao","key3":"18\"\u52063"}

会自动又为双引号加上反斜线。

综上,预防我的这种情况产生的最好方式就是不要对json数据进行stripcslashes操作,以免将数组中正常的 \" 结构给破坏掉了。

另外,这里有一个很好的json格式校验网站:http://www.bejson.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值