Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menstrim Dekod Tatasusunan JSON Besar-besaran untuk Mengelakkan Isu Memori?

Bagaimanakah Saya Boleh Menstrim Dekod Tatasusunan JSON Besar-besaran untuk Mengelakkan Isu Memori?

Susan Sarandon
Lepaskan: 2024-12-17 10:48:25
asal
298 orang telah melayarinya

How Can I Stream Decode Massive JSON Arrays to Avoid Memory Issues?

Penstriman Penyahkodan Tatasusunan JSON Besar-besaran

Mendapatkan semula tatasusunan JSON yang besar daripada fail boleh menjadi intensif memori apabila menggunakan Unmarshal, kerana ia memuatkan keseluruhan data ke dalam ingatan sekaligus. Untuk menangani perkara ini, kami boleh memanfaatkan teknik penstriman untuk memproses elemen tatasusunan mengikut elemen.

Contoh Menggunakan Penyahkod Strim

Pakej pengekodan/json menyediakan penyelesaian untuk penstriman JSON pemprosesan. Berikut ialah contoh lanjutan daripada dokumentasi pakej:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "strings"
)

func main() {
    const jsonStream = `
                [
                    {"Name": "Ed", "Text": "Knock knock."},
                    {"Name": "Sam", "Text": "Who's there?"},
                    {"Name": "Ed", "Text": "Go fmt."},
                    {"Name": "Sam", "Text": "Go fmt who?"},
                    {"Name": "Ed", "Text": "Go fmt yourself!"}
                ]
            `
    type Message struct {
        Name, Text string
    }
    dec := json.NewDecoder(strings.NewReader(jsonStream))

    // read open bracket
    t, err := dec.Token()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%T: %v\n", t, t)

    // while the array contains values
    for dec.More() {
        var m Message
        // decode an array value (Message)
        err := dec.Decode(&m)
        if err != nil {
            log.Fatal(err)
        }

        fmt.Printf("%v: %v\n", m.Name, m.Text)
    }

    // read closing bracket
    t, err = dec.Token()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%T: %v\n", t, t)

}
Salin selepas log masuk

Dalam contoh ini, kami mencipta penyahkod strim (dec) dan menggunakan dec.More() dalam gelung untuk lelaran melalui elemen tatasusunan. Setiap mesej dinyahkod dan kandungannya dicetak tanpa memuatkan keseluruhan tatasusunan ke dalam memori.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Dekod Tatasusunan JSON Besar-besaran untuk Mengelakkan Isu Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan