tp5中json_decode始终无法解析正确的json字符串
原创 php thinkphp5 2021-08-19 17:46:01
0 收藏 0 浏览174 评论0
琴朗
已发20篇
有侵犯版权请及时联系我们,我们将在24小时内删除文章。
投诉举报


    在开发项目中,会将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);


完美解决。






评论(0) 我要评论