Maison >développement back-end >Golang >Comment rassembler les flux JSON sans charger l'intégralité de l'objet en mémoire ?
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!