Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Memproses Fail JSON Besar dengan Cekap dalam PHP Tanpa Isu Memori?

Bagaimanakah Saya Boleh Memproses Fail JSON Besar dengan Cekap dalam PHP Tanpa Isu Memori?

Linda Hamilton
Linda Hamiltonasal
2024-12-14 15:00:17253semak imbas

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

Memproses Fail JSON Besar dalam PHP

Mengendalikan fail JSON yang banyak boleh menjadi satu cabaran, terutamanya apabila berurusan dengan fail yang berpotensi besar melebihi saiz 200M . Untuk menangani isu ini, adalah penting untuk mengelakkan memuatkan keseluruhan fail ke dalam memori. Sebaliknya, pendekatan penstriman disyorkan untuk memproses objek secara individu tanpa menimbal kandungan penuh.

Satu penyelesaian yang berkesan ialah menggunakan penghurai tarik JSON penstriman seperti pcrov/JsonReader untuk PHP 7. Penghurai ini mengikut pendekatan yang berbeza daripada peristiwa -penghurai berasaskan dengan membenarkan anda meminta data secara eksplisit dengan memanggil kaedah pada penghurai. Ini memberikan lebih fleksibiliti dan kawalan ke atas proses penghuraian.

Contoh 1: Membaca Objek Sebagai Seluruh Entiti

Contoh ini menunjukkan cara mengekstrak objek daripada fail JSON sebagai lengkap tatasusunan:

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();

Contoh 2: Membaca Individu Bernama Elemen

Untuk mengekstrak elemen tertentu daripada setiap objek, contoh ini menunjukkan:

$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();

Contoh 3: Menapis Sifat mengikut Nama

Contoh terakhir ini mempamerkan cara menapis sifat mengikut nama tertentu, walaupun nama pendua wujud dalam nama yang sama objek:

$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();

Pendekatan optimum untuk memproses fail JSON yang besar akan berbeza-beza bergantung pada struktur data dan operasi yang dimaksudkan. Walau bagaimanapun, dengan memanfaatkan penstriman penghurai JSON, pembangun boleh mengendalikan fail JSON yang besar dengan cekap tanpa menghadapi masalah memori.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memproses Fail JSON Besar dengan Cekap dalam PHP Tanpa Isu Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn