Bonjour a tous,

j'ai fait un script php pour transformer des donnees json brut issues d'un webhook en plusieurs fichiers Excels avec les donnees reformate.

mes donnees arrives sous forme de pile json en temps reel. ce qui me donne un fichier de ce style la.

json1
json2
json3
json4
json5
json6

dans un seul gros fichier, qui ce rempli de plus en plus pour devenir completement ingerable.
il s'agit de donnee issues d'un systeme de mail marketing.

ma solution gros bourrin consiste a parser tous ce petit monde en un seul json enorme ... et de le balancer dans un bdd pour faire un pres tri de mes infos et ensuite de les rebalancer dans des fichiers excel (oui je sais excel c'est le mal, pas tapper ^^)


tout allait bien au debut avec des fichiers allant jusqu'a 2 mega, mais bon la on parle de fichier de 30 mega qui continu a gonfler ^^

et comme par hasard mon json est corrompu maintenant donc mon systeme n'est pas viable du tous je vous le confirme tres mauvaise idee ...

une idee pour recuperer mes donnee autrement et passer outre les ligne json corrompu ?

je pensais lire dans mon fichier et decoder mes json un par un mais je vois pas trop comment gerer ca.



function CleanAndDecodeRawJson($url) {
//format multiple json raws to a uniq clean json

    try {
        $raw = file_get_contents($url);
     
    } catch (Exception $e) {
        echo $e->getMessage();
        return -1;
    }
   
    $raw = str_replace(' ', '', $raw);
    $raw = str_replace("\t", '', $raw);
    $raw = str_replace("\n", '', $raw);
    $raw = str_replace("\r", '', $raw);
    $raw = str_replace("][", ',', $raw);
   
    $decoded = json_decode($raw);
	if($decoded==null){
	echo 'Error : json missformed <br>';
	}else{
		echo "Extract JSON File OK.<br>";
    	}
	return $decoded;
}

function setFormatedDataArrayWithJson($decoded, &$tabRaw) {

    $i = 0;
    foreach ($decoded as $data) {
        $tabRaw[$i]["email"] = $data->email;
        $tabRaw[$i]["date"] = date('Y-m-d H:i:s', $data->timestamp);
        $tabRaw[$i]["event"] = $data->event;
        $tabRaw[$i]["newsletter_id"] = $data->newsletter->newsletter_id;
        if (isset($data->url)) {
            $tabRaw[$i]["url"] = $data->url;
        } else {
            $tabRaw[$i]["url"] = null;
        }
        $i+=1;
    }
}



la question c'est comment je peux lire mes json un par un en naviguant dans le fichier en gerant eventuellement un json tronque ..

toutes informations meme incompletes est acceuilli avec plaisir !

merci