Laravel 8如何提取API返回JSON响应中的title字段值
错误原因
json_decode() 函数默认第二个参数为false,执行后返回的是stdClass类对象,而非关联数组,你使用$data['items']的数组语法访问对象属性,就会触发这个报错。
解决方法
方法1:统一用对象语法访问属性
直接修改name赋值行,把数组访问改为对象属性访问:
$provider = $company->providers()->create([ 'name' => $data->items[0]->title ]);
方法2:让json_decode返回关联数组
给json_decode()传入第二个参数true,解析结果会转为关联数组,原有数组访问语法就可以正常生效:
// 修改json_decode行 $data = json_decode($response->body(), true); // 后续赋值保持数组语法即可,注意title也要用数组访问 $provider = $company->providers()->create([ 'name' => $data['items'][0]['title'] ]);
方法3(Laravel专属更简洁写法)
Laravel的Http响应类自带json()方法,无需手动调用json_decode,直接返回解析后的关联数组:
// 去掉自己写的json_decode行,直接调用json方法 $data = $response->json(); $provider = $company->providers()->create([ 'name' => $data['items'][0]['title'] ]);
补充优化建议
即使接口约定固定返回1条items数据,也建议增加存在性判断,避免接口异常返回空结构时触发报错:
// 示例:用optional辅助函数避免报错 'name' => optional($data->items[0] ?? null)->title ?? '默认名称'
内容的提问来源于stack exchange,提问作者Jakef19
相关产品推荐
相关产品推荐

