首页 > 解决方案 > JSON循环未打印预期结果

问题描述

我有一个 JSON 数组,我试图循环并回显某些位。

可以在此处看到完整数组的片段 - https://pastebin.com/eCYcZWpV

这是我正在使用的代码:

$str = file_get_contents('tst.json');
$json = json_decode($str, true);

       foreach($json['results'] as $item){
           
            foreach($item['vehicle'] as $data){
         
          echo $data['ownershipCondition'];
          echo "<br>";
          echo $data['registration'];
          echo "<br>";
          echo $data['vin'];
          echo "<br>";
          echo $data['make'];
          echo "<br>";
          echo $data['model'];
          echo "<br>";
          echo "<br>";
        }
    }

这是预期的结果:

Used
ABC123
32847328474
Renault
Clio

Used
DEF123
48578435347589
Dacia
Sandeo
Clio

这就是我实际遇到的一大堆非法字符串偏移错误

U
U
U
U
U
U

H
H
H
H
H
H

V
V
V
V
V
V

R
R
R
R
R
R

C
C
C
C
C
C

标签: phpjson

解决方案


根据您的示例数据,$item['vehicle']是一个对象,而不是一个数组。它只有一组数据。因此你不需要第二个foreach。只需更直接地访问属性:

$str = file_get_contents('tst.json');
$json = json_decode($str, true);

foreach($json['results'] as $item){
       
  echo $item['vehicle']['ownershipCondition'];
  echo "<br>";
  echo $item['vehicle']['registration'];
  echo "<br>";
  echo $item['vehicle']['vin'];
  echo "<br>";
  echo $item['vehicle']['make'];
  echo "<br>";
  echo $item['vehicle']['model'];
  echo "<br>";
  echo "<br>";
}

PS 如果您想知道,字符串偏移错误的原因是因为通过循环$item["vehicle"],您正在循环每个属性。因此,例如在第一个循环中,它会找到“ownershipCondition”属性,并将其值放入$data. 所以提供的第一个值$data是“Used”,显然这是一个没有任何属性的字符串,例如“ownershipCondition”、“registration”等。


推荐阅读