#php #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
Ответ №1:
В соответствии с вашими образцами данных, $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>";
}
P.S. На случай, если вам интересно , причина ошибок смещения строки в том, что, просматривая $item["vehicle"]
, вы зацикливаете каждое свойство. Так, например, в первом цикле он найдет свойство «ownershipCondition» и введет в него его значение $data
. Таким образом, первое указанное значение $data
будет «Используется», и очевидно, что это строка, которая не имеет никаких свойств, таких как «ownershipCondition», «регистрация» и т.д.