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) }
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!