2016-06-10 7 views
0

У меня есть текстовый файл с рядом записей JSON. Есть простой способ, используя PHP для декодирования записей. Пример:Декодирование нескольких записей JSON

{ 
    'id':1 
} 

{ 
    'id':2 
} 
+2

Есть ли пустые строки между jsons? – splash58

+0

Да, существуют пустые строки между отдельными записями JSON – EastsideDeveloper

+3

Действительные JSON использует кавычки, а не одинарные кавычки. Помните об этом, пытаясь использовать 'json_decode'. – vsharper

ответ

3

Если есть только одна пустая строка между каждым JSON блоком данных, то следующим код будет работать, он обрабатывает каждую строку файла, если пустая строка считывается один блок данных JSON завершен и отображаются, а затем продолжается с остальным:

<?php 
$arr = file("data.json"); // READ WHOLE FILE AS ARRAY OF STRINGS. 
$block = ""; // STORE ONE "BLOCK" OF JSON DATA. 
foreach ($arr as $line) // PROCESS EACH LINE IN FILE. 
{ if (strlen($line) > 2) // IF LINE CONTAINS MORE THAN LINEBREAK. 
     $block .= $line; // STORE LINE. 
    else { // EMPTY LINE FOUND (LINE WITH LINEBREAK ONLY, 0D,OA). 
     $json = json_decode($block); 
     print_r($json); 
     echo "<br/><br/>"; 
     $block = ""; // CLEAR BUFFER FOR NEXT BLOCK OF JSON DATA. 
     } 
} 
// PRINT LAST BLOCK OF JSON DATA. 
    $json = json_decode($block); 
    print_r($json); 
?> 

Протестировано с этим файлом:

{ 
    "id":1 
} 

{ 
    "id":2 
} 

{ 
    "id":3 
} 
2

Когда вы получаете некоторые действительные данные JSon в наличии, вы можете сделать следующее

<?php 
     $data = rtrim(ltrim(file_get_contents('file.json'))); 
     $json_objs = explode("\n",$data); 
     if(count($json_objs)){ 
       foreach($json_objs as $json_obj){ 
        //do something 
       } 
     }else{ 
       echo 'No json objects found in file'; 
     } 
    ?> 
Смежные вопросы