PHP调用英国议会API获取议员全名数据提取问题求助
从英国议会成员API提取nameFullTitle字段的解决方案
问题分析
你调用API成功,但数据提取失败的核心原因是对返回的JSON结构理解有误,导致访问路径错误,同时遍历数组的方式也不符合数据结构。
修正后的代码
保留你原有的callAPI函数,修改数据提取部分的代码即可:
$url = 'https://members-api.parliament.uk/api/Location/Constituency/Search?searchText=KY11%201NF&skip=0&take=20'; $get_data = callAPI('GET', $url, false); echo '<br>'; $response = json_decode($get_data, true); // 检查是否存在有效选区数据 if (isset($response['response']['items']) && !empty($response['response']['items'])) { // 遍历每个匹配的选区 foreach ($response['response']['items'] as $constituency) { // 逐层访问到nameFullTitle字段 if (isset($constituency['currentRepresentation']['member']['nameFullTitle'])) { echo '议员全名头衔:' . $constituency['currentRepresentation']['member']['nameFullTitle'] . '<br>'; } else { echo '该选区暂无在任议员信息<br>'; } } } else { echo '未找到匹配的选区<br>'; } // 处理API返回的错误信息(如果有) if (isset($response['response']['errors']) && !empty($response['response']['errors'])) { foreach ($response['response']['errors'] as $error) { echo 'API错误:' . $error . '<br>'; } }
原代码的问题说明
访问路径错误:
原代码中$data = $response['response']['items']['id'][0];是错误的——items是索引数组,必须先通过[0]获取第一个选区元素,再访问内部字段,正确路径是$response['response']['items'][0]['id']。而nameFullTitle字段嵌套在currentRepresentation->member下,需要逐层访问。数组遍历错误:
原代码中直接echo $x1、echo $x2会输出Array(因为这些变量是数组),无法查看具体内容。如果需要调试结构,应该用print_r($x1)或var_dump($x1)。错误处理不严谨:
直接访问$response['response']['errors']可能会因键不存在触发报错,需要先通过isset()判断字段是否存在。
调试技巧
如果不确定JSON结构,可以先执行var_dump($response)打印完整数组,明确每个字段的层级关系后再编写提取逻辑。
内容的提问来源于stack exchange,提问作者David Thorn
相关产品推荐
相关产品推荐

