Maison >développement back-end >Golang >Comment rassembler les flux JSON sans charger l'intégralité de l'objet en mémoire ?

Comment rassembler les flux JSON sans charger l'intégralité de l'objet en mémoire ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 19:16:29440parcourir

 How to Marshal JSON Streams Without Loading the Entire Object in Memory?

Marshaling des flux JSON sans charger des objets entiers

Votre objectif est d'encoder un flux de données volumineux sans conserver l'intégralité du flux en mémoire. Bien que JSON soit un format de données courant, l'interface json.Marshaler de la bibliothèque standard n'offre pas de moyen simple d'y parvenir.

Création de chaînes personnalisées

Actuellement, vous Nous construisons manuellement la chaîne JSON à l'aide de WriteString, ce qui est une approche raisonnable étant donné le manque de fonctionnalités intégrées. Cette méthode garantit que vous ne gérez que de petits morceaux de données à la fois.

Modification de encoding/json

Si vous souhaitez modifier le package encoding/json, vous pourrait patcher la fonction reflexValueQuoted pour gérer les canaux sous forme de tableaux. Cela vous permettrait de parcourir les canaux et d'encoder leurs valeurs dès qu'elles deviennent disponibles sans mettre en mémoire tampon l'intégralité du flux.

Exemple de correctif de code

Voici une version modifiée de l'encodage/ json que vous pouvez utiliser :

<code class="go">// Inside switch:
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(']')</code>

Conclusion

La seule option actuelle pour marshaler les flux JSON sans charger l'intégralité des données est de construire manuellement la chaîne au fur et à mesure que vous Je suis en train de faire ou de modifier le package encoding/json. La modification du package nécessite une certaine connaissance de l'implémentation interne et doit être considérée avec attention.

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