Вложенный Json php для проблемы статуса цикла [0] - PullRequest
0 голосов
/ 16 января 2019

Привет, у меня есть формат Json, как показано ниже:

{
   "result":0,
   "status":[
      {
         "id":"00001",
         "vid":"yes"
      },
      {
         "id":"00002",
         "vid":"yes"
      },
      {
         "id":"00003",
         "vid":"no"
      }
   ]
}

Я хочу использовать функцию json_decode в PHP для декодирования значений id, таких как ниже:

 00001
 00002
 00003

вот код, который я использую:

$url = file_get_contents("URL");

foreach(json_decode($url, true) as $key=>$value){
    foreach($value->status[0] as $key1=>$value1){
        echo $value1->id;
    }
}

Кажется, проблема в status[0], насколько я знаю, использование status[0] - единственный способ выбрать клавишу status. Однако я не могу заставить цикл работать правильно.

Я получаю сообщение об ошибке: Trying to get property of non-object означает, что status[0] не находит status в массиве Json, однако я понятия не имею, почему это так, поскольку он работает, когда я получаю значение вроде:
$id = $url->status[0]->id;

Если у кого-нибудь есть какие-либо предложения или советы, я буду очень признателен. Спасибо

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Ваш JSON недопустим. Look {"id": "00001",} И json_decode ($ json, false) должен быть.

рабочий раствор:

$json = '{
"result":0,
"status":[{"id":"00001"},
  {"id":"00002"},
  {"id":"00003"}
]
}';

$data = json_decode($json, false);

foreach ($data->status as $status){
    echo $status->id;
}
0 голосов
/ 16 января 2019

Вы можете просто использовать array_column, чтобы извлечь значения id из элемента status вашего JSON (после того, как это будет исправлено путем удаления лишних запятых):

$ids = array_column(json_decode($json, true)['status'], 'id');
print_r($ids);

Выход:

Array (
    [0] => 00001
    [1] => 00002
    [2] => 00003 
)

Демонстрация на 3v4l.org

0 голосов
/ 16 января 2019

Я удалил некоторые запятые из ваших данных JSON.

Код: демо: https://3v4l.org/C1Mda

$json = '{"result":0,"status":[{"id":"00001"},{"id":"00002"},{"id":"00003"}]}';

foreach(json_decode($json, true)['status'] as $status){
    echo $status['id'] , "\n";
}

Выход:

00001
00002
00003

Поскольку вы используете параметр true в json_decode, создается массив. Вам нужно использовать синтаксис в квадратных скобках.

Или вы можете использовать объекты:

foreach(json_decode($json)->status as $status){
    echo $status->id , "\n";
}
...