我以前使用PHP处理数组,但通常是易于管理和爬行的简单关联数组。
我正在向API端点发出HTTP POST请求,该端点以JSON格式返回大量数据。我正在使用json_decode($ response,true)将json转换为数组,并且试图在没有运气的情况下访问数组的组件 - 只是为我提供空白页面。或者,如果我在数组上执行print_r,我只会得到一堆混乱的数据,所以我知道至少API正在返回数据。
以下是API
的响应摘录{
"data": {
"accounts": [
{
"locations": [
{
"name": "Test Location",
"soundZones": [
{
"name": "Main",
"nowPlaying": {
"startedAt": "2017-09-06T00:38:51.000Z",
"track": {
"name": "Some Song Name 123",
"imageUrl": "https://some-cdn-url.com",
"Uri": "5hXEcqQhEjfZdbIZLO8mf2",
"durationMs": 327000,
"artists": [
{
"name": "SomeName",
"Uri": "5lpH0xAS4fVfLkACg9DAuM"
}
]
}
}
}
]
},
我如何使用PHP来访问轨道对象下的NAME值? (在这个例子中,我试图返回值“Some Song Name 123”)
这是我正在使用的代码..我知道我已经离开了
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$response = json_decode($response, true);
print_r($response[0]);
答案 0 :(得分:2)
那是因为你不仅返回一个数组,而且还返回一个数组和一个对象。
<?php
echo $response[0]->data->accounts[0]['locations'][0]->soundZones[0]->nowPlaying->track->name;
答案 1 :(得分:2)
我更喜欢sf_admin的答案,因为这种混乱的对象真的更适合作为一个对象,但是使用json_decode($response, true)
然后我认为你应该能够像这样访问它:
echo $response[0]['data']['accounts'][0]['locations'][0]['soundZones'][0][0]['nowPlaying']['track']['name'];
答案 2 :(得分:1)
试试这个。
//$response = json_decode($response, true);
$response = json_decode($response);
// loop
if (isset($response->data->accounts)) {
foreach ($response->data->accounts as $account) {
foreach ($account->locations as $location) {
foreach ($location->soundZones as $soundZone) {
print_r($soundZone->nowPlaying->track->name);
}
}
}
}
// first
if (isset($response->data->accounts[0]->locations[0]->soundZones[0]->nowPlaying->track->name)) {
print_r($response->data->accounts[0]->locations[0]->soundZones[0]->nowPlaying->track->name);
}
一些歌曲名称123