Traitement de gros fichiers JSON en PHP
La gestion de fichiers JSON volumineux peut être un défi, en particulier lorsqu'il s'agit de fichiers potentiellement volumineux dépassant 200 Mo . Pour résoudre ce problème, il est crucial d’éviter de charger l’intégralité du fichier en mémoire. Au lieu de cela, une approche de streaming est recommandée pour traiter les objets individuellement sans mettre en mémoire tampon l'intégralité du contenu.
Une solution efficace consiste à utiliser un analyseur pull JSON en streaming comme pcrov/JsonReader pour PHP 7. Cet analyseur suit une approche différente de l'analyseur d'événements. -analyseurs basés sur vous permettant de demander explicitement des données en appelant des méthodes sur l'analyseur. Cela offre une plus grande flexibilité et un plus grand contrôle sur le processus d'analyse.
Exemple 1 : Lire des objets en tant qu'entités entières
Cet exemple montre comment extraire des objets du fichier JSON dans leur intégralité. arrays :
use pcrov\JsonReader\JsonReader; $reader = new JsonReader(); $reader->open("data.json"); $reader->read(); // Outer array. $depth = $reader->depth(); // Check in a moment to break when the array is done. $reader->read(); // Step to the first object. do { print_r($reader->value()); // Do your thing. } while ($reader->next() && $reader->depth() > $depth); // Read each sibling. $reader->close();
Exemple 2 : Lecture d'un individu nommé Éléments
Pour extraire des éléments spécifiques de chaque objet, cet exemple montre :
$reader = new pcrov\JsonReader\JsonReader(); $reader->open("data.json"); while ($reader->read()) { $name = $reader->name(); if ($name !== null) { echo "$name: {$reader->value()}\n"; } } $reader->close();
Exemple 3 : Filtrage des propriétés par nom
Ce dernier exemple montre comment filtrer les propriétés par un nom spécifique, même s'il existe des noms en double au sein du même nom. object:
$json = <<<JSON [ {"property":"value", "property2":"value2"}, {"foo":"foo", "foo":"bar"}, {"prop":"val"}, {"foo":"baz"}, {"foo":"quux"} ] JSON; $reader = new pcrov\JsonReader\JsonReader(); $reader->json($json); while ($reader->read("foo")) { echo "{$reader->name()}: {$reader->value()}\n"; } $reader->close();
L'approche optimale pour le traitement des gros fichiers JSON variera en fonction de la structure des données et des opérations prévues. Cependant, en tirant parti des analyseurs JSON en streaming, les développeurs peuvent gérer efficacement des fichiers JSON volumineux sans rencontrer de problèmes de mémoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!