首页 > 解决方案 > 循环嵌套 JSON 响应 PHP

问题描述

我正在尝试从返回的 JSON 响应中循环并返回数据(“rank_details”中的“rank”)。

这是 JSON 响应的片段(我从中得到什么: $array = json_decode($apiResponse); )

(object) array(
   'obj' => 
  array (
    0 => 
    (object) array(
       'name' => 'I\'m a HellRazor (feat. Crucifix)',
       'id' => 13859011,
       'data' => 
      array (
        0 => 
        (object) array(
           'timestp' => '2019-10-27T00:00:00.000Z',
           'score' => 1.9610844011276853,
           'rank_details' => 
          array (
            0 => 
            (object) array(
               'rank' => 191,
               'country' => 'RU',
               'score' => 1.9610844011276853,
               'genre' => 'Country',
            ),
          ),
        ),
        1 => 
        (object) array(
           'timestp' => '2019-12-04T00:00:00.000Z',
           'score' => 14.70808550760029,
           'rank_details' => 
          array (
            0 => 
            (object) array(
               'rank' => 9,
               'country' => 'CH',
               'score' => 14.70808550760029,
               'genre' => 'Country',
            ),
          ),
        ),
        2 => 
        (object) array(
           'timestp' => '2020-03-18T00:00:00.000Z',
           'score' => 13.299189761918104,
           'rank_details' => 
          array (
            0 => 
            (object) array(
               'rank' => 5,
               'country' => 'RU',
               'score' => 13.299189761918104,
               'genre' => 'Country',
            ),
          ),
        ),
        3 => 
        (object) array(
           'timestp' => '2020-07-12T00:00:00.000Z',
           'score' => 19.02841337415393,
           'rank_details' => 
          array (
            0 => 
            (object) array(
               'rank' => 77,
               'country' => 'DE',
               'score' => 19.02841337415393,
               'genre' => 'Country',
            ),
          ),
        ),
        4 => 
        (object) array(
           'timestp' => '2020-10-02T00:00:00.000Z',
           'score' => 2.631257456412845,
           'rank_details' => 
          array (
            0 => 
            (object) array(
               'rank' => 154,
               'country' => 'RU',
               'score' => 2.631257456412845,
               'genre' => 'Country',
            ),
          ),
        ),
        5 => 
        (object) array(
           'timestp' => '2020-10-03T00:00:00.000Z',
           'score' => 1.896575572629275,
           'rank_details' => 
          array (
            0 => 
            (object) array(
               'rank' => 195,
               'country' => 'RU',
               'score' => 1.896575572629275,
               'genre' => 'Country',
            ),
          ),
        ),
      ),
    ),.....

这是我的代码片段:

$apiResponse = curl_exec($cc);
$array = json_decode($apiResponse);
foreach ($array as $key => $arrays) { // This will search in the 2 jsons
    foreach($arrays as $key => $value) {     
        echo "\n Record ID:  " . $value->id;        
        echo "\n Record Name:  " . $value->name;         
        echo "\n Record Rank:  " . $value->obj->data->rank_details->rank;
        echo "\n";    
   }
}

记录名称和 ID 可以通过,但不在“顶级”中的任何内容都不会通过。任何帮助是极大的赞赏。

标签: phpjson

解决方案


即使只有一个条目,您也必须对 data 和 rank_details 数组进行索引。

这对我有用:

echo "\n Record Rank:  " . $value->data[0]->rank_details[0]->rank;

推荐阅读