Leggere file json con più righe

di il
3 risposte

Leggere file json con più righe

Buonasera a tutti,
ho un file json con diverse righe cominciano tutte con "{" e finiscono con "}".
tramite questa foreach:

$varcont=1;
// Preparo un array vuoto
$data = array();
// Leggo il file in righe
$lines = file("C:\Users\XXX\Desktop\json\XXX_mod.json");
// Ciclo le righe
foreach ($lines as $line) {
  // Leggo il JSON della riga
   $json = json_decode($line);
   echo $varcont++;
   echo "<br>";
   echo "<br>"; 
   $data[] = $json; 
   }
Riesco a passare tutte le righe, lo so perchè faccio stampare a video il numero di foreach e so quante sono le righe.
Poi con questa IF nel foreach controllo se il json è valido ed con una seconda foreach ed estraggo i dati riga per riga:
  // Se il JSON è valido...
  if ($json) {
    // Aggiungo il dato all'array
    $data[] = $json;
    echo "<br>";
    echo $var_Number++;
    echo "<br>";
  }
  foreach ($data as $data){
    $id = $data->id;
    $full_name = $data->full_name;
    $first_name = $data->first_name;
   }
  
Il problema è che finchè è la prima riga non ci sono problemi, la legge tranquillamente, appena però va per salvare i dati del json nuovamente nelle variabile della seconda foreach mi da questo errore:
Fatal error: Uncaught Error: Cannot use object of type stdClass as array in C:\xampp\htdocs\PHP7\Linkedin_DB.php:166 Stack trace: #0 {main} thrown in C:\xampp\htdocs\PHP7\Linkedin_DB.php on line 166
La riga 166 è la seguente
$data[] = $json;
Da cosa può dipendere??
Grazie

3 Risposte

  • Re: Leggere file json con più righe

    Includi un esempio del file JSON che stai leggendo, così possiamo verificare se contiene problemi.
  • Re: Leggere file json con più righe

    Credo che sta usando JSON Lines con separatore di linee "\n" e estensione .jsonl: I valori più comuni saranno oggetti o array, ma è consentito qualsiasi valore JSON.

    È difficile scrivere codice legacy poiché un JSON empty (o JSON che poi è empty) cambia in php da versione a versione.
    Non devi guardare quanti n cicli fai ma se json_decode ritorna un JSON valido (dipende dalla versione di php, nonché il codice utilizzato per la creazione). (Quindi ti aiuta gli errori che ti compaiono a schermo seguiti da ricerca con GOOGLE, risolvili e sei nella strada giusta).
    Questo tipo di aiuto richiede molto tempo per la risoluzione, temo è difficile in modo gratuito

    @ALka poiché il codice contiene dati sensibili, probabilmente @spider81man mostrerà uno pseudo .jsonl che potrebbe non rispecchiare il codice originale. Saremmo al punto di partenza. Per tale motivo ho risposto, aiutarlo definendo almeno la struttura di cosa sta leggendo (che lui non conosce).
  • Re: Leggere file json con più righe

    Ciao io farei cosi'.

    <?php
    $Json = file_get_contents("myfile.json");
    // converto
    $myarray = json_decode($Json, true);

    // da qui in poi farei ciclare l array

    foreach ($myarray as $data){
    $id = $data->id;
    $full_name = $data->full_name;
    $first_name = $data->first_name;
    }
    ?>
Devi accedere o registrarti per scrivere nel forum
3 risposte