"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment rassembler efficacement des flux de données volumineux en JSON sans les charger en mémoire ?

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

Publié le 2024-10-31
Parcourir:563

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

La nécessité 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(`]}`)

Extension de l'encodage/json pour la prise en charge des canaux

Pour améliorer le package d'encodage/json avec la prise en charge des canaux, vous pouvez modifier le refletValueQuoted fonction dans encoding/json/encode.go. Plus précisément, ajoutez un cas pour les canaux semblable à 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(']')

Conclusion

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3