我返回了JSON,它将多个对象作为数组的值。
我需要检测JSON中的" Error“属性是否返回,但如果error属性不存在,我不希望返回错误。
这是我得到的经过解码的JSON。JSON可以像这样返回,但它可能不会:
JSON
[{"Error":"1050"}]我的PHP
$data = json_decode($json);
print_r($data); 它返回:
Array
(
[0] => stdClass Object
(
[Error] => 1050
)
)发布于 2017-07-13 06:08:03
我认为对于您的特定示例,您可以使用$arr[0]->Error访问错误,但json_decode中的assoc选项意味着它取决于您要求json_decode执行的操作。
这意味着如果您使用$arr = json_decode($json, true),那么您将使用$arr[0]['Error']访问错误,因为JSON将始终将对象解码为关联数组。
这是一个关于JSON和PHP的变化和混淆的有趣例子,您可以从PHP中的关联数组开始,将其转换为JSON,然后再将其转换为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
}..。但这是因为在大多数情况下,当未初始化的值不存在时,总是希望它们被赋予默认值。(该函数之所以如此强大,是因为它也适用于对象和数组)
发布于 2017-07-13 06:04:10
您可以将json_decode与包含返回的JSON的变量一起使用,然后使用array_key_exists检查对象是否包含错误键。
array_key_exists("error", $jsonArray)看起来和How to check if an array element exists?类似的问题。
发布于 2017-07-13 06:27:10
从技术上讲,您可以将对象转换为数组并使用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
}
}https://stackoverflow.com/questions/45068146
复制相似问题