如何检查JSON索引(键)是否存在


How to check if JSON index (key) exists?

我有一个API,它返回这个:

{"响应":{"cid":5122405,"title":"Austin","area":"Estrie","region":"Quebec"},{"acid":5467453,"title":"奥斯汀","region":"Manitoba"}]}

我想打印所有区域,但作为上面的例子,魁北克的奥斯汀有区域值(Estrie),但马尼托巴的奥斯汀没有。

我的代码是:

for($i = 0; $i < count($json_array['response']); ++$i){ 
    echo $json_array['response'][$i]['area'];

但问题是我得到了这个错误注意:未定义的索引:…中的区域其中不存在区域值(如马尼托巴省的奥斯汀)。

如何检查区域是否存在?

有两种基本方法可以处理这个问题。

最简单的方法是检查变量的存在

echo array_key_exists('area', $json_array['response'][$i]) ? $json_array['response'][$i]['area'] : null;

另一种方法是标准化API的响应,使area密钥始终存在

function standardizeApi($values) 
{
    foreach ($values['response'] as $i => $details) {
        if (!array_key_exists('area', $details)) {
            $values['response'][$i]['area'] = null; // default value
        }
    }
    return $values;
}
$json_array = standardizeApi($json_array);
// loop though as normal

如果你有多个钥匙要检查,第二种方法会更好。您可以确保数组包含值,即使api缺少这些值。

编辑:拼写

如果快速

for($i = 0; $i < count($json_array['response']); ++$i){ 
     if($json_array['response'][$i]['area']){
echo $json_array['response'][$i]['area'];
};

您可以使用json解码作为对象,并获得项目列表:

$stringJson = '{"response":[{"cid":5122405,"title":"Austin","area":"Estrie","region":"Quebec"},{"cid":5467453,"title":"Austin","region":"Manitoba"}]}';
$jsonObj = json_decode($stringJson);
foreach ($jsonObj->response as $item) {
   echo $item->cid; // 5122405 5467453
}