PHP调用API时如何提取单条/指定字段数据(如district)
实现方法
你调用的邮编查询接口返回的是JSON格式数据(你当前代码里的$xmldata变量命名有误,实际拿到的是JSON字符串不是XML),要提取指定字段只需要先把JSON字符串解析为PHP可操作的数组/对象,再按数据结构读取对应字段即可。
具体修改逻辑
- 保留原有curl请求逻辑拿到返回结果后,先做请求成功判断、JSON格式合法性校验
- 用
json_decode()把JSON字符串转为PHP关联数组 - 按接口返回的层级结构读取
district字段:该接口返回的顶层是索引数组,第一个元素下的PostOffice是存储邮编对应地址信息的数组,每个地址项里包含District字段(注意字段首字母大写)
修改后的完整代码
<?php $url = "https://api.postalpincode.in/pincode/201301"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 注:该公开邮编接口无需Basic认证,以下两行配置可删除,不影响正常请求 // curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); // curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_TIMEOUT, 3600); $response = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); // 判断请求是否成功 if ($response === false) { exit("接口请求失败"); } // 解析JSON为关联数组,第二个参数传true表示返回数组而非对象 $data = json_decode($response, true); // 判断JSON解析是否合法 if (json_last_error() !== JSON_ERROR_NONE) { exit("返回数据格式解析失败"); } // 按结构读取district字段,同一个邮编可能对应多个投递区,这里默认取第一个匹配的行政区,做兜底避免报错 $district = $data[0]['PostOffice'][0]['District'] ?? '未查询到对应行政区'; // 直接输出目标字段 echo $district; ?>
补充说明
如果同一个邮编对应多个行政区需要全部输出,可以遍历PostOffice数组取值,示例代码:
if (!empty($data[0]['PostOffice'])) { foreach ($data[0]['PostOffice'] as $addressItem) { echo $addressItem['District'] . "<br>"; } }
内容的提问来源于stack exchange,提问作者Hemant Singh
相关产品推荐
相关产品推荐

