如何使用 Guzzle 和 Laravel 从 JSON 响应中提取单个数组值
Posted
技术标签:
【中文标题】如何使用 Guzzle 和 Laravel 从 JSON 响应中提取单个数组值【英文标题】:How to extract individual array values from JSON response using Guzzle and Laravel 【发布时间】:2017-12-13 22:59:43 【问题描述】:我正在努力从 JSON 响应中获取数据。这是我获取数据的代码:
$client = new Client;
$r = $client->get("http://my.api.com/get-campaign/" . $id . "?api_token=1235");
$apiResult = json_decode($r->getBody(), true);
dd($apiResult);
我得到这样的东西:
array:4 [
"campaign" => array:1 [
0 => array:3 [
"manufacturer" => "Sony"
"product" => "PlayStation 4"
"created_at" => "2015-07-04T00:00:00+00:00"
]
]
"media" => array:2 [
"video" => "https://my.domain.com/421156.mp4"
"images" => "https://my.domain.com/tv/thumbs/421156-1.jpg"
]
"statistics" => array:3 [
"runs" => 172
"firstseen_at" => "2015-07-04T19:06:41+00:00"
"lastseen_at" => "2015-07-09T12:04:13+00:00"
]
"broadcasts" => array:172 []
]
如何从该响应中获取单个值?假设我想显示或将 "manufacturer"
的值分配给另一个变量,并在另一个变量中存储运行次数 ("runs"
)?
对于制造商,我尝试过这样做:
dd($apiResult["campaign"]->manufacturer);
但随后显示错误 - 试图获取非属性对象!
【问题讨论】:
【参考方案1】:如果您想玩对象,请使用以下内容:
$apiResult = json_decode($r->getBody());
dd($apiResult->campaign[0]->manufacturer);
或者想要一个关联数组
$apiResult = json_decode($r->getBody(), true);
dd($apiResult["campaign"][0]["manufacturer"]);
更多详情请阅读documentation of json_decode
【讨论】:
【参考方案2】:看起来活动是一个数组,所以你需要这样做:
$apiResult["campaign"][0]->manufacturer
【讨论】:
还是一个错误 -Trying to get property of non-object
好的。问题是,就像@MrSpider 所说,我将对象访问与数组访问混合在一起。【参考方案3】:
您将对象访问与数组访问混合在一起。
$apiResult = json_decode($r->getBody(), true);
dd($apiResult["campaign"][0]["manufacturer"]);
或与对象
$apiResult = json_decode($r->getBody(), false);
dd($apiResult->campaign[0]->manufacturer);
【讨论】:
以上是关于如何使用 Guzzle 和 Laravel 从 JSON 响应中提取单个数组值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel 5.2 + Guzzle 6 存储 JWT 并授予用户访问权限
将 JSON 数据从 API 转换为数组并在 Laravel 和 Guzzle HTTP Client 中分别显示?
使用 Guzzle 将数据和文件一起发布到 Laravel API