как вывести строку из ответа API JSON с многомерным массивом - PullRequest
0 голосов
/ 18 мая 2019

У меня есть скрипт php, который подключен к API, и я пытаюсь отформатировать ответ, чтобы он хорошо выглядел на странице. Однако я не могу получить доступ к нужным мне данным.

Ответ json выглядит примерно так ---

[body] => stdClass Object
        (
            [items] => Array
                (
                    [0] => stdClass Object
                        (
                            [metadata] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [key] => type
                                            [value] => challenge
                                        )

                                    [1] => stdClass Object
                                        (
                                            [key] => name
                                            [value] => do somethhing
                                        )

                                    [2] => stdClass Object
                                           .................
                                         )
                                      )
                     [1] => stdClass Object
                        (
                            [metadata] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [key] => type
                                            [value] => challenge
                                        )

                                    [1] => stdClass Object
                                        (
                                            [key] => name
                                            [value] => do somethhing else
                                        )

                                    [2] => stdClass Object
                                    ................

Я пробовал следующее -

//echo $response->raw_body->metadata->name;
//echo $response->raw_body->metadata;
//echo $response->raw_body;

$newresponse = $response->raw_body;
$items = json_decode($newresponse, true);

$response1 = json_decode($response, true);
echo $response1['body']['items']['metadata']['name'];

echo $items[2]['name'];
//echo $items->items;
//echo $items->items->metadata->name;
//echo $items->metadata->name;
echo $items->items[1]->metadata->name;

После того, как я это понял, я пытаюсь зациклить результаты для каждого цикла -

foreach($items as $item) {
echo '<div>';
echo $item->items->metadata->name;
echo '</div>';
}

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Но внутри ваших метаданных у вас есть еще один массив, который вы должны повторять, а затем выводить только значение

foreach($items as $item) {

$secondLoop=item->metadata;

foreach ($secondLoop as $loop)
{
    if($loop->key=="name")
        echo $loop->value;
 }
}

Хорошо (обновить ответ) Я пытаюсь создать массив объектов, подобный вам, для проверки кода

<?php

$c['body'] = (object)['items'=>[(object)["metadata"=>[(object)['key'=>'name','value'=>'cc']]]]];

var_dump($c);

$items=$c['body']->items;

foreach($items as $item) {

$secondLoop=$item->metadata;

foreach ($secondLoop as $loop)
{
    if($loop->key=="name")
        echo $loop->value;
 }
}

И ответ

    array(1) {
  ["body"]=>
  object(stdClass)#3 (1) {
    ["items"]=>
    array(1) {
      [0]=>
      object(stdClass)#2 (1) {
        ["metadata"]=>
        array(1) {
          [0]=>
          object(stdClass)#1 (2) {
            ["key"]=>
            string(4) "name"
            ["value"]=>
            string(2) "cc"
          }
        }
      }
    }
  }
}
cc
0 голосов
/ 18 мая 2019

У вас есть не имя, а ключ и значение, поэтому для json_decode в качестве ассоциативного массива

echo ['body']['items'][0]['metadata'][0]['key'];  // type

echo ['body']['items'][0]['metadata'][0]['value'];  // challenge
...