Menyahkod JSON Strim Besar Dengan Cekap
Tatasusunan JSON yang besar boleh menimbulkan cabaran memori apabila menyahkodnya sekali gus. Untuk menangani perkara ini, adalah dinasihatkan untuk menggunakan pendekatan penstriman yang berulang melalui elemen satu demi satu.
Menstrim Elemen JSON mengikut Elemen
Pakej pengekodan/json menyediakan kaedah untuk menstrim data JSON. Berikut ialah contoh:
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!"} ]` dec := json.NewDecoder(strings.NewReader(jsonStream)) // skip the opening bracket dec.Token() // read and process each element for dec.More() { var message Message if err := dec.Decode(&message); err != nil { log.Fatal(err) } fmt.Printf("%v: %v\n", message.Name, message.Text) } // skip the closing bracket dec.Token() }
Dalam kod ini, kami menggunakan json.NewDecoder untuk mencipta penyahkod bagi strim JSON. Kami kemudian melelang melalui strim, melangkau kurungan pembukaan dan penutup ({ dan }) dan menggunakan dec.More() untuk menyemak sama ada terdapat lebih banyak elemen untuk diproses.
Untuk setiap elemen, kami mencipta struct Message dan nyahkod data JSON ke dalamnya menggunakan dec.Decode. Kami kemudian mencetak medan Nama dan Teks mesej.
Pendekatan ini membolehkan kami memproses tatasusunan JSON yang besar tanpa memuatkan keseluruhan tatasusunan ke dalam memori, sekali gus mengelakkan ralat memori dan meningkatkan prestasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahkod Data JSON Penstriman Besar dengan Cekap dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!