Laravel调用国家API提取name字段返回null如何解决
Laravel调用API提取国家name字段为空解决方案
问题原因
你当前直接对接口返回的全量集合调用pluck('name'),但从你给出的响应结构可以看到,name字段不在响应的最外层,最外层仅包含countries等2个顶级键,所有国家数据都嵌套在countries字段对应的数组里,所以直接在最外层检索name自然拿不到值,返回结果为null。你之前用foreach遍历返回空,也是因为遍历对象是最外层数组而非countries内的国家列表。
修正代码
先从响应集合中取出countries对应的国家数组,再对该数组调用pluck方法提取name字段即可,修正后的代码如下:
$response = Http::withHeaders([ 'x-rapidapi-host' => 'world-geo-data.p.rapidapi.com', 'x-rapidapi-key' => '1fa601995fmshcc1d2fcc97ee24cp1ac29djsn9b9b11cc10ec', ])->get('https://world-geo-data.p.rapidapi.com/countries'); // 可选:先判断接口请求是否成功,避免异常 if (!$response->successful()) { return []; } // 先取countries字段,再提取name return $response->collect('countries')->pluck('name')->all();
foreach实现参考
如果你偏好使用foreach遍历实现,写法如下:
$countries = $response->json('countries') ?? []; $names = []; foreach ($countries as $country) { $names[] = $country['name']; } return $names;
内容的提问来源于stack exchange,提问作者Lolu Adelore
相关产品推荐
相关产品推荐

