在服务返回错误的情况下,我正在努力解析Web服务响应JSON。
示例JSON - 成功流程:
{
"Response": [{
"iconPath" : "/img/theme/destiny/icons/icon_psn.png",
"membershipType": 2,
"membershipId": "4611686018429261138",
"displayName": "Spuff_Monkey"
}],
"ErrorCode": 1,
"ThrottleSeconds": 0,
"ErrorStatus": "Success",
"Message": "Ok",
"MessageData":{}
}
示例JSON - 错误流程:
{
"ErrorCode": 7,
"ThrottleSeconds": 0,
"ErrorStatus": "ParameterParseFailure",
"Message": "Unable to parse your parameters. Please correct them, and try again.",
"MessageData": {}
}
现在我的PHP:
function hitWebservice($endpoint) {
$curl = curl_init($endpoint);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
$json_response = curl_exec($curl);
if(curl_exec($curl) === false) {
echo "Curl error: " . curl_error($curl);
}
curl_close($curl);
$array_response = json_decode($json_response, true);
$function_response = array();
if (!isset($array_response['Response'])) {
$function_response = $array_response;
} else {
$function_response = $array_response['Response'];
}
return $function_response;
}
我想要实现的是当JSON包含“响应”块时,我把它放在一个新数组中,只从函数返回那个细节,其中“Response”不存在我想要返回完整JSON作为数组。
但是目前,如果没有“响应”,我会得到一个空数组。
我的逻辑出现了问题,我无法在我的脑海中超越它,所以是时候寻求帮助了!
答案 0 :(得分:1)
如果您注意到,好的和坏的回复都包含ErrorCode
您可以更好地设计代码以便在此字段中工作,而不是测试可能存在或可能不存在的字段。
所以试试这个: -
$array_response = json_decode($json_response, true);
switch ( $array_response['ErrorCode'] ) {
case 1 :
do_errorCode_1_processing($array_response)
break;
case 2 :
do_errorCode_2_processing($array_response)
break;
// etc etc
}
答案 1 :(得分:-1)
isset()不是用于检查数组中的键是否存在的正确函数。
改为使用array_key_exists()。
http://php.net/manual/en/function.array-key-exists.php
因此您的代码应如下所示:
$array_response = json_decode($json_response, true);
$function_response = array();
if (array_key_exists('Response', $array_response)) {
$function_response = $array_response['Response'];
} else {
$function_response = $array_response;
}
return $function_response;
以上应该可以解决问题。