json_decode

json_decode

json_decode解码失败的处理方案

J3Xadmin 发表了文章 • 0 个评论 • 3851 次浏览 • 2018-07-26 14:50 • 来自相关话题

在做支付宝开发的时候,请求返回的JSON数据没有问题。但是使用json_decode却什么都没有获得。非常的疑惑。
依据经验应该是json_decode解析失败了。如果是以前,那么我肯定会检查返回的JSON字符串是否不对。但现在返回的JSON字符串是支付宝发回来的,理论上不可能出错的。
在搜搜相关资料后,发现可以使用json_last_error()函数量获得具体的错误信息。整个的代码如下: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_UTF8。也就是说格式不对。最后在从支付宝返回回来的数据进行一下转码,最终解决问题。$result = iconv('gb2312','utf-8',$result); 查看全部
在做支付宝开发的时候,请求返回的JSON数据没有问题。但是使用json_decode却什么都没有获得。非常的疑惑。
依据经验应该是json_decode解析失败了。如果是以前,那么我肯定会检查返回的JSON字符串是否不对。但现在返回的JSON字符串是支付宝发回来的,理论上不可能出错的。
在搜搜相关资料后,发现可以使用json_last_error()函数量获得具体的错误信息。整个的代码如下:
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_UTF8。也就是说格式不对。最后在从支付宝返回回来的数据进行一下转码,最终解决问题。
$result = iconv('gb2312','utf-8',$result);


json_decode解码失败的处理方案

J3Xadmin 发表了文章 • 0 个评论 • 3851 次浏览 • 2018-07-26 14:50 • 来自相关话题

在做支付宝开发的时候,请求返回的JSON数据没有问题。但是使用json_decode却什么都没有获得。非常的疑惑。
依据经验应该是json_decode解析失败了。如果是以前,那么我肯定会检查返回的JSON字符串是否不对。但现在返回的JSON字符串是支付宝发回来的,理论上不可能出错的。
在搜搜相关资料后,发现可以使用json_last_error()函数量获得具体的错误信息。整个的代码如下: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_UTF8。也就是说格式不对。最后在从支付宝返回回来的数据进行一下转码,最终解决问题。$result = iconv('gb2312','utf-8',$result); 查看全部
在做支付宝开发的时候,请求返回的JSON数据没有问题。但是使用json_decode却什么都没有获得。非常的疑惑。
依据经验应该是json_decode解析失败了。如果是以前,那么我肯定会检查返回的JSON字符串是否不对。但现在返回的JSON字符串是支付宝发回来的,理论上不可能出错的。
在搜搜相关资料后,发现可以使用json_last_error()函数量获得具体的错误信息。整个的代码如下:
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_UTF8。也就是说格式不对。最后在从支付宝返回回来的数据进行一下转码,最终解决问题。
$result = iconv('gb2312','utf-8',$result);