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

How to check if JSON index (key) exists?

我有这个 API 那 returns 这个:

{"response": [{"cid":5122405,"title":"Austin","area":"Estrie","region":"Quebec"},{"cid":5467453,"title":"Austin","region":"Manitoba"}]}

我想打印所有地区,但如上例,魁北克的奥斯汀有面积值(Estrie),但曼尼托巴的奥斯汀没有。

我的代码是:

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

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

如何检查 area 是否存在?

如果

for($i = 0; $i < count($json_array['response']); ++$i){ 
     if($json_array['response'][$i]['area']){
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 缺少它们。

编辑:拼写

您可以使用 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
}