2

JSON ファイルをデコードしようとしています。

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());
}

?>

期待していただきありがとうございますジョン

編集

バーマーのおかげで

私の新しいコードは以下の通りです

<?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の値を表示するだけではまだ取得できません

また、値の 1 つが NULL であるため、特定の値が次の JSON セットにプッシュされているようです。たとえば、上記の出力に示されている T と C

さらに助けていただければ幸いです

ありがとう

4

2 に答える 2