我找回了JSON,它将多个对象作为数组的值。
我需要检测JSON中的“Error”属性是否返回,但是Error属性不存在的可能性我不希望出现错误。
这是我得到的解码JSON。 JSON可以这样回来,但它可能不会:
JSON
[{"Error":"1050"}]
我的PHP
$data = json_decode($json);
print_r($data);
返回:
Array
(
[0] => stdClass Object
(
[Error] => 1050
)
)
答案 0 :(得分:2)
我认为,对于您的具体示例,您可以使用$arr[0]->Error
访问错误,但json_decode中的关联选项意味着它取决于您json_decode
要求的内容。
这意味着如果您执行$arr = json_decode($json, true)
,那么您将使用$arr[0]['Error']
访问错误,因为JSON将始终将对象解码为关联数组。
这是使用JSON和PHP进行变异和混淆的可爱示例,您可能从PHP中的关联数组开始,将其转换为JSON并返回并丢失关联数组。只是值得关注的事情。
在PHP中,您可以访问带有[
方括号]
的数组和带有->
箭头的对象属性。它们不像JavaScript中的括号和点符号那样可互换。因此,您始终需要注意数据结构是对象还是关联数组。
至于测试是否存在该属性,请使用isset:
if(isset($arr[0]->Error)) {
// handle error
}
现在,我真的讨厌在任何地方使用isset,所以我有一个实用功能:
function getProperty($object, $propertyName, $defaultValue = false)
{
$returnValue = $defaultValue;
if (!empty($object)) {
if (is_array($object)) {
if (isset($object[$propertyName])) {
$returnValue = $object[$propertyName];
}
} else {
if (isset($object->$propertyName)) {
$returnValue = $object->$propertyName;
}
}
}
return $returnValue;
}
在我的代码中,我的意思是:
if(($error = getProperty($arr[0], 'Error')) === false) {
// process $error
}
...但是,总是希望未初始化的值在大多数情况下不存在时会被赋予默认值。 (该函数非常大,因为它也适用于对象和数组)
答案 1 :(得分:0)
您可以将json_decode与包含返回的JSON的变量一起使用,然后使用array_key_exists检查对象是否包含错误键。
array_key_exists("error", $jsonArray)
答案 2 :(得分:0)
从技术上讲,您可以将对象强制转换为数组并使用array_key_exists()。这不是最优雅的解决方案,但它会起作用。
$json = '[{"Error":"1050"}]';
$j = json_decode($json);
if (array_key_exists(0, $j)) {
if (array_key_exists('Error', (array)$j[0])) {
// It exists
}
}
答案 3 :(得分:-1)
$someobject = json_decode($yourjsongoeshere);
if(isset($someobject["Error"])){
echo ($someobject["Error"]);
}