Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menyahkod Data JSON Penstriman Besar dengan Cekap dalam Go?

Bagaimanakah Saya Boleh Menyahkod Data JSON Penstriman Besar dengan Cekap dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-18 22:49:10265semak imbas

How Can I Efficiently Decode Large Streaming JSON Data in Go?

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!

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