关于php中解析json时值中包含双引号的问题
2014-11-19 19:53
771 查看
首先写在前面,以下内容都是在讨论json中的 \" 结构。 \" 反斜线+双引号 在json是一个正常的结构体!
我有一个比较大的json格式数据,是通过接口拿到的,在拿到之后,我的代码中对这段json进行了去掉反斜线的解析:
此时如果数据源json中包含有\"这样的字符时,此时经过stripcslashes"加工“之后是无法再得到正确的json格式的,也就是变成了脏数据。
所以我企图用正则表达式匹配到所有这其中被去掉了反斜线孤零零的双引号:
这里是观察到了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,解析之后的数组是这样的:
可以看到反斜线已经被去掉。
之后我们再对这个数组进行json_encode,得到结果:
会自动又为双引号加上反斜线。
综上,预防我的这种情况产生的最好方式就是不要对json数据进行stripcslashes操作,以免将数组中正常的 \" 结构给破坏掉了。
另外,这里有一个很好的json格式校验网站:http://www.bejson.com
我有一个比较大的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 '<pre>';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
相关文章推荐
- Java JSON解析中一个关于双引号的问题
- Java JSON数据解析中关于字段双引号的问题
- PHP接收IOS post过来的json数据无法解析的问题
- 关于客户端与服务器ajax使用json数据交互,出现中文乱码或因包含html标答而报错的问题(base64加密)
- 关于apache不能解析php语言的问题
- 过滤PHP输出JSON内容内容中包含回车双引号
- Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题
- 关于AFN 解析不标准的json格式问题
- 关于jquery解析json数据时动态追加tr 指定条数换行问题 实现list的 并列显示效果
- php解析json时遇到的坑爹问题
- 关于php中json_encode中文乱码问题
- 关于处理PHP json_encode返回的json数据一些小问题
- PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题
- 解析JSON问题(一)包含特殊字符
- PHP json_decode函数无法解析json2.js生成json的问题
- 玩转Web之Json(一)-----easy ui+ajax + json 中关于Json的解析问题
- 关于PHP在数组对象与JSON数据之间的转换问题(编码问题)
- json解析双引号问题
- 关于android 的org.json类JsonObject解析值为null的出现的问题
- PHP网站开发中关于包含路径问题的解决方案