Maison >développement back-end >tutoriel php >Comment puis-je traiter efficacement des fichiers JSON volumineux en PHP sans problèmes de mémoire ?

Comment puis-je traiter efficacement des fichiers JSON volumineux en PHP sans problèmes de mémoire ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-14 15:00:17253parcourir

How Can I Efficiently Process Large JSON Files in PHP Without Memory Issues?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn