PHPjson_decode函数解析json结果为NULL的解决⽅法
在做⽹站 CMS 模块时,对于模块内容 content 字段,保存的是 json 格式的字符串,所以在后台进⾏模块内容的编辑操作 ( 取出保存的数据 ) 时,需要⽤到 json_decode() 函数。
但是在解析的时候,使⽤ json_decode() 函数解析的结果⼀直是 NULL,没有出现希望解析成的数组。下⾯是问题和分析:
1. 当输出 json 字符串时,代码和页⾯的显⽰内容分别是:
echo$content = $res[0]['con']['content'];
只需要考虑 $content , $res[0]['con']['content'] 是从返回的数据中取出 content 的值,这⾥不需要考虑。这时页⾯显⽰:
{"bpic":"group1\/M00\/00\/0D\/rBAK31STtZeAe056AAKWuBmsAgc339.jpg","bname":"112","breason":"22","about1":"3334","about2":"444","about3":"555","tpic1":"group1\/M00\/00\/0D\/rBAK31STsyGARPwHAAMcD98U8xo736.jpg","tpic2":"group1稍微美化⼀下:
{
"bpic":"group1\/M00\/00\/0D\/rBAK31STtZeAe056AAKWuBmsAgc339.jpg",
"bname":"112",
"breason":"22",
"about1":"3334",
"about2":"444",
"about3":"555",
"tpic1":"group1\/M00\/00\/0D\/rBAK31STsyGARPwHAAMcD98U8xo736.jpg",
phpjson格式化输出"tpic2":"group1\/M00\/00\/0D\/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg",
"tpic3":"group1\/M00\/00\/0D\/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg"
}
2. 此时使⽤ json_decode() 解析 $content,并使⽤ var_dump 打印:
$content = json_decode($content,true);
但是页⾯却显⽰ NULL。此时使⽤ json_last_error() 函数打印⼀下错误,页⾯显⽰4,也就是语法错误。
echo$errorinfo = json_last_error();  //输出4 语法错误
解决⽅法⼀:
出现这个问题是因为在 json 字符串中反斜杠被转义,只需要⽤ htmlspecialchars_decode() 函数处理⼀下 $content 即可:
$content = htmlspecialchars_decode($content);
此时再使⽤ json_decode() 函数解析,就没有问题了,页⾯输出:
Array (
[bpic] => group1/M00/00/0D/rBAK31STtZeAe056AAKWuBmsAgc339.jpg
[bname] => 112
[breason] => 22
[about1] => 3334
[about2] => 444
[about3] => 555
[tpic1] => group1/M00/00/0D/rBAK31STsyGARPwHAAMcD98U8xo736.jpg
[tpic2] => group1/M00/00/0D/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg
[tpic3] => group1/M00/00/0D/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg
)
解决⽅法⼆:
在保存 json 数据时使⽤ urlencode() 函数:
$content = urlencode(json_encode($content));
解析时使⽤ urldecode() 函数:
$content = urldecode($content);
即可避免反斜杠转义造成的⽆法解析。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。