在开发项目中,会将json字符串写入到数据库中,然后在利用json_decode进行解析,但是规范的json字符串,通过json_decode得到的结果是NULL。(json字符串在解析工具中确定是正确的格式)
先找一下错误原因。在json_decode后面增加如下代码。
$str = "json格式字符串";//这里是要解析的字符串 $result = json_decode($str,true); switch (json_last_error()) { case JSON_ERROR_NONE: echo ' - No errors'; break; case JSON_ERROR_DEPTH: echo ' - Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: echo ' - Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: echo ' - Unexpected control character found'; break; case JSON_ERROR_SYNTAX: echo ' - Syntax error, malformed JSON'; break; case JSON_ERROR_UTF8: echo ' - Malformed UTF-8 characters, possibly incorrectly encoded'; break; default: echo ' - Unknown error'; break; }
通过如下代码,发现错误代码是 JSON_ERROR_CTRL_CHAR,那就好办了,然后找解决方案
该字符中可能含了ASCII码ETB控制符,即\x17导致json解析失败
解决方法如下:去掉控制符再进行decode
$str= "json格式字符串"; $result = preg_replace('/[\x00-\x1F]/','',$str); $result = json_decode($result,true);
完美解决。