PHP中json_decode遇特殊字符失效问题求助
解决json_decode因特殊字符返回NULL的问题
问题原因
你的JSON文件存在无效转义字符:正则表达式里的[\.]中的反斜杠\属于JSON特殊字符,必须用另一个反斜杠转义(即写成\\)。原JSON未正确转义,导致格式不合法,json_decode无法解析,返回NULL。
解决方案
1. 修正JSON文件内容
将creds2.json中的每个\替换为\\,修正后内容如下:
{ "TEMP_REGEX": "[0-9]{2,3}[\\.]{1}[0-9]{1}", "HUMI_REGEX": "[0-9]{2,3}[\\.]{1}[0-9]{1}" }
注:正则里的[\.]可简化为\.(字符集内.无需转义),简化后JSON需写成"[0-9]{2,3}\\.{1}[0-9]{1}",同样要保证反斜杠转义为\\
2. 添加错误排查代码
在PHP代码中加入json_last_error_msg(),可快速定位解析失败的具体原因:
$json_file_path = 'creds2.json'; $json_contents = file_get_contents($json_file_path); $data = json_decode($json_contents, true); if ($data === null) { echo 'JSON解析失败:' . json_last_error_msg(); } else { var_dump($data); }
若为转义问题,会输出类似JSON解析失败:Syntax error的提示,帮助快速定位。
验证结果
修正JSON后执行PHP代码,即可正常解析出数组,var_dump输出:
array(2) { ["TEMP_REGEX"]=> string(21) "[0-9]{2,3}[\.]{1}[0-9]{1}" ["HUMI_REGEX"]=> string(21) "[0-9]{2,3}[\.]{1}[0-9]{1}" }
内容的提问来源于stack exchange,提问作者BartJesper
相关产品推荐
相关产品推荐

