对接三方API的时候,经常会遇到接收的json串是非法的而导致程序出错.这种情况有什么有效的方法来避免呢?
我们知道PHP的内置函数json_decode()在解析json字符串的时候,如果失败返回空,内置函数json_last_error()该函数见名思意返回 JSON 编码解码时最后发生的错误.
function isJson($string)
{
json_decode($string);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - 没有错误发生';
break;
case JSON_ERROR_DEPTH:
echo ' - 到达了最大堆栈深度';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - 无效或异常的 JSON';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - 控制字符错误,可能是编码不对';
break;
case JSON_ERROR_SYNTAX:
echo ' - 语法错误';
break;
case JSON_ERROR_UTF8:
echo ' - 异常的 UTF-8 字符,也许是因为不正确的编码';
break;
case JSON_ERROR_UNSUPPORTED_TYPE:
echo ' - 指定的类型,值无法编码';
break;
case JSON_ERROR_INVALID_PROPERTY_NAME:
echo ' - 指定的属性名无法编码';
break;
case JSON_ERROR_UTF16:
echo ' - 畸形的 UTF-16 字符,可能因为字符编码不正确';
break;
default:
echo ' - Unknown error';
break;
}
}
这样我们在对接三方API的时候先判断接收的是否是合法json串再做逻辑处理,可以有效避免非法json串带来的问题.
网友评论