Я пытаюсь декодировать файл JSON.Декодирование JSON в PHP
Вышеприведенный экстракт JSON показан ниже. Чтобы более точно описать этот JSON, это 3 X набора кода JSON. Я пытаюсь извлечь значения, связанные с «main_train_uid» и «assoc_train_uid», например G90491 и G90525, из первой строки.
Я пытался копировать примеры кода, показанные в различных частях StackOverflow, но терплю неудачу
Я понимаю, что это должно быть относительно легко, но я просто не могу получить его. Выход, который я получаю, Ошибка Json с ошибкой: 0. Это не укажет ничего плохого, но я не получаю значения. Я все время путаюсь между массивами и объектами. Мой код отображается после выписки JSON.
{"JsonAssociationV1":{"transaction_type":"Delete","main_train_uid":"G90491","assoc_train_uid":"G90525","assoc_start_date":"2013-09-07T00:00:00Z","location":"EDINBUR","base_location_suffix":null,"diagram_type":"T","CIF_stp_indicator":"O"}}
{"JsonAssociationV1":{"transaction_type":"Delete","main_train_uid":"P20328","assoc_train_uid":"P21318","assoc_start_date":"2013-08-23T00:00:00Z","location":"MARYLBN","base_location_suffix":null,"diagram_type":"T","CIF_stp_indicator":"C"}}
{"JsonAssociationV1":{"transaction_type":"Delete","main_train_uid":"L13077","assoc_train_uid":"L13045","assoc_start_date":"2013-08-23T00:00:00Z","location":"STPANCI","base_location_suffix":null,"diagram_type":"T","CIF_stp_indicator":"C"}}
Сниппет JSON хранится в json.txt
<?php
$file = "json.txt";
$trains = file_get_contents($file);
foreach (explode("\n", $trains) as $line) {
$train = json_decode($line,true);
if (is_array($train)) {
foreach($train as $item=>$value) {
foreach($value as $entry) {
echo $entry->main_train_uid;
echo $entry->assoc_train_uid;
}
}
}
}
if (is_null($json_train)) {
die("Json decoding failed with error: ". json_last_error());
}
?>
Благодаря в ожидании Джон
EDIT
Благодаря Barmar
Мой новый код как bel вл
<?php
$file = "json.txt";
$trains = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($trains as $train) {
$json=json_decode($train,true);
foreach($json as $item=>$value) {
print_r($item);
foreach($value as $entry) {
echo '<br>';
print_r($entry);
}
}
}
if (is_null($json)) {
die("Json decoding failed with error: ". json_last_error());
}
?>
Сейчас я получаю следующий результат (т.е. значения) без каких-либо ошибок, является большим
JsonAssociationV1
Delete
G90491
G90525
2013-09-07T00:00:00Z
EDINBUR
T
OJsonAssociationV1
Delete
P20328
P21318
2013-08-23T00:00:00Z
MARYLBN
T
CJsonAssociationV1
Delete
L13077
L13045
2013-08-23T00:00:00Z
STPANCI
T
C
Однако я до сих пор не могу выделить некоторые индивидуальные значения эха самой по себе (мне нужно сделать это, чтобы поместить их в базу данных позже). Так, например, я до сих пор не могу получить на только с указанием значения для main_train_uid
Кроме того, поскольку один из значений NULL это, кажется, толкая вниз определенные значения в следующий набор JSON. Например, T и C показано из положить выше
Любая дополнительная помощь оценили
Благодарности
когда в сомнении, используйте 'print_r', ex:' $ train = json_decode ($ line, true); echo '
'. print_r ($ train, true). '
'; ' – OneOfOne
Нет переменной' $ json_train', имя переменной - '$ train'. – Barmar
Нули ничего не нажимают, они просто печатают пустые строки для этих значений. Вот как «echo» и «print_r» печатают нулевые и ложные значения, они печатаются как пустые строки. Используйте 'var_dump', чтобы вы всегда могли видеть значения. – Barmar