Maison >développement back-end >Golang >Comment puis-je décoder efficacement des données JSON en streaming volumineuses en Go ?

Comment puis-je décoder efficacement des données JSON en streaming volumineuses en Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-18 22:49:10265parcourir

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

Décoder efficacement le JSON à grand flux

D'énormes tableaux JSON peuvent poser un défi de mémoire lors de leur décodage en une seule fois. Pour résoudre ce problème, il est conseillé d'utiliser une approche de streaming qui parcourt les éléments un par un.

Streaming JSON élément par élément

Le package encoding/json fournit une méthode de streaming de données JSON. Voici un exemple :

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

Dans ce code, nous utilisons un json.NewDecoder pour créer un décodeur pour le flux JSON. Nous parcourons ensuite le flux, en sautant les parenthèses ouvrantes et fermantes ({ et }) et en utilisant dec.More() pour vérifier s'il y a plus d'éléments à traiter.

Pour chaque élément, nous créons une structure Message et décodez les données JSON en utilisant dec.Decode. Nous imprimons ensuite les champs Nom et Texte du message.

Cette approche nous permet de traiter de grands tableaux JSON sans charger l'intégralité du tableau en mémoire, évitant ainsi les erreurs de mémoire insuffisante et améliorant les performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn