2017-12-30 18 views
-4

複数のjsonオブジェクトを含むjsonファイルがあります。 例複数のjsonをphp配列に変換する

{"t":"abc-1","d":"2017-12-29 12:42:53"} 
{"t":"abc-2","d":"2017-12-29 12:43:05"} 
{"t":"abc-3","d":"2017-12-30 14:42:09"} 
{"t":"code-4","d":"2017-12-30 14:42:20"} 

は、このファイルを読み込んで、データベースに格納したいが、私はさらに、私は、データベースに格納することができますPHPの配列にJSONに変換することができませんでした。

json_decode関数を試しましたが、機能しませんでした。私はこれを検索しますが、すべてのリンクで、その表示はjson_decodeを使用しています。以下は私のコードです

$filename = "folder/filename.json"; 
$data = file_get_contents($filename); 
echo $data; 
$tags = json_decode($data, true); 
echo"<pre>";print_r($tags);exit; 

$データはエコーされますが、$タグはエコーされません。

ありがとうございます。

+0

を、それを使用しますが、JSONファイルを自分で作成したことがありますか? – bestprogrammerintheworld

答えて

-1

それは、次のようにそれを修正する複数のルート要素

を持っているとして、あなたのJSONは([]とカンマを注意してください)動作するはず、無効である:

[ 
    {"t":"abc-1","d":"2017-12-29 12:42:53"}, 
    {"t":"abc-2","d":"2017-12-29 12:43:05"}, 
    {"t":"abc-3","d":"2017-12-30 14:42:09"}, 
    {"t":"code-4","d":"2017-12-30 14:42:20"} 
] 

あなたはどのようにJSONに影響を与えることができない場合PHPが無効な書式をサポートするように構築されていないため、独自の読者を作成する必要があります。ファイルを新しい行で区切り、それぞれを個別に解析することができます。

+0

jsonが動的に作成されています –

0

4行しか表示できない場合は、各行を展開してjson_decodeして配列に追加できます。

$s = '{"t":"abc-1","d":"2017-12-29 12:42:53"} 
{"t":"abc-2","d":"2017-12-29 12:43:05"} 
{"t":"abc-3","d":"2017-12-30 14:42:09"} 
{"t":"code-4","d":"2017-12-30 14:42:20"}'; 

$arr = explode(PHP_EOL, $s); 
Foreach($arr as $line){ 
    $json[] = json_decode($line,true); 
} 
Var_dump($json); 

https://3v4l.org/97m0E

+0

いいえ、動的に生成するために4行以上になることはありません。 –

+0

@Nageshどちらの方法でも動作します。しかし、それがより多くの行であれば、フィンランド語には少し時間がかかります。なぜあなたはこれをdownvoteでしたか? – Andreas

+0

私はどんな答えもdownvoteしなかった......... –

0

行の複数のオブジェクトは、JSON配列で囲まれ、あなたは、[] file.Alsoの開始時と終了時に[閉じる可能性が必要elements.Soなどカンマで区切る必要がありますpreタグ

どちらかあなたがその「JSON」を生成したファイルを修正する必要があるか、あなたは一度に1行を取得する関数fgetsを使用することができ、およびその他で指摘したようにすべての行

0

にJSONのデコードを使用し、JSONいるあなたを共有は有効ではありません。そして、私はそれがあなたのファイルに同じように保存されていると思います。私は、このファイルを1行ずつ読み込んでデコードすることをお勧めします。

$handle = fopen("folder/filename.json", "r"); 
if ($handle) { 
    while (($line = fgets($handle)) !== false) { 

     $tags = json_decode($line, true); 
     echo"<pre>";print_r($tags);exit; 
    } 

    fclose($handle); 
} else { 
    // error opening the file. 
} 
0
Assuming a file called `filename.json` contains the following lines 

{"t":"abc-1","d":"2017-12-29 12:42:53"} 
{"t":"abc-2","d":"2017-12-29 12:43:05"} 
{"t":"abc-3","d":"2017-12-30 14:42:09"} 
{"t":"code-4","d":"2017-12-30 14:42:20"} 

So each one is a separate json entity 

$filename = "folder/filename.json"; 
$lines=file($filename); 
foreach($lines as $line){ 
    $obj=json_decode($line); 
    $t=$obj->t; 
    $d=$obj->d; 
    /* do something with constituent pieces */ 
    echo $d,$t,'<br />'; 
} 
0

オブジェクトの配列を作成し、後で

$j = array_map('json_decode', file('php://stdin')); 
print_r($j); 

demo

+0

実際には重要ではありませんが、array_mapは配列をループするよりも実際には遅いです。 – Andreas

+0

@アンドレアスそれは... https://eval.in/928356 – splash58

+0

私はそう思います。私はちょっと前にこのスレッドを読んでいます。 https://stackoverflow.com/questions/18144782/performance-of-foreach-array-map-with-lambda-and-array-map-with-static-functionこれらのテストによると、foreachはすべてで高速またはほぼ同等ですアカウント。しかし、私はそれがその後に依存することができると思います... – Andreas

関連する問題