Maison > développement back-end > Golang > le corps du texte

Comment rassembler efficacement des flux de données volumineux en JSON sans les charger en mémoire ?

Mary-Kate Olsen
Libérer: 2024-10-29 04:51:29
original
888 Les gens l'ont consulté

How to Efficiently Marshal Large Data Streams in JSON without Loading into Memory?

Marshaling de flux de données volumineux en JSON sans chargement en mémoire

Le besoin d'encoder des flux de données volumineux en JSON se pose souvent, mais le chargement de l'intégralité diffuser en mémoire en même temps peut être peu pratique. Cet article explore les moyens de surmonter ce défi sans l'interface json.Marshaler intégrée.

Encodage avec json.Encoder : une limitation

Tentatives d'encodage d'un flux volumineux de données avec json.Encoder échouera en raison de son incapacité à gérer les canaux (chaîne de canal) en mémoire.

Encodage JSON personnalisé

En l'absence d'un outil intégré approprié -dans la solution, un encodage JSON personnalisé devient nécessaire. Cela implique de créer manuellement la chaîne JSON, comme démontré dans l'extrait ci-dessous :

w := os.Stdout
w.WriteString(`{ "Foo": "` + t.Foo + `", "Bar": [`)

for x := range t.Bar {
    _ = json.NewEncoder(w).Encode(x)
    w.WriteString(`,`)
}

w.WriteString(`]}`)
Copier après la connexion

Extension d'encoding/json pour la prise en charge des canaux

Pour améliorer le package encoding/json avec la prise en charge des canaux, vous pouvez modifier la fonction reflexValueQuoted dans encoding/json/encode.go. Plus précisément, ajoutez un cas pour les chaînes similaire à celui-ci :

case reflect.Chan:
    e.WriteByte('[')
    i := 0
    for {
        x, ok := v.Recv()
        if !ok {
            break
        }
        if i > 0 {
            e.WriteByte(',')
        }
        e.reflectValue(x)
        i++
    }
    e.WriteByte(']')
Copier après la connexion

Conclusion

Bien que le package encoding/json ne prenne actuellement pas en charge l'encodage des chaînes, cet article fournit approches alternatives pour marshaler efficacement de gros flux de données en JSON. L'encodage personnalisé permet de diffuser des données directement dans la sortie JSON, tandis que l'extension de encoding/json offre une solution plus robuste.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!