Encodage de flux de données volumineux avec MarshalJSON sans charger tous les objets en mémoire
Vouloir encoder un flux important de données à l'aide de json.Encoder sans chargement tout cela en mémoire en même temps est un problème courant. Malheureusement, le package encoding/json ne fournit pas de prise en charge directe pour cela.
Solution de contournement actuelle
La solution actuelle, comme vous l'avez mentionné, consiste à créer manuellement la chaîne JSON. toi-même. Cela implique d'écrire la structure JSON pièce par pièce, à mesure que les données deviennent disponibles à partir du flux. Il s'agit d'une approche efficace, mais elle peut être fastidieuse et sujette aux erreurs.
Patch proposé
Pour améliorer ce processus, on pourrait modifier le package encoding/json. Plus précisément, la fonction reflectValueQuoted dans encoding/json/encode.go pourrait être modifiée pour gérer des canaux tels que des tableaux. Cela permettrait la diffusion directe des données des canaux vers la sortie JSON.
Voici une modification proposée au cas Array dans ReflectValueQuoted :
<code class="go">case reflect.Array: e.WriteByte('[') n := v.Len() for i := 0; i < n; i++ { if i > 0 { e.WriteByte(',') } e.reflectValue(v.Index(i)) } e.WriteByte(']') // Add the following case for channels: 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>
Avantages du correctif
Ce correctif faciliterait grandement l'encodage de flux de données volumineux sans charger tous les objets en mémoire. Cela éliminerait également le besoin de concaténation manuelle des chaînes, réduisant ainsi le risque d'erreurs et améliorant la lisibilité du code.
Conclusion
Bien que le correctif proposé ne fasse pas partie de la version actuelle encoding/json, il démontre une amélioration potentielle qui pourrait rendre le streaming de données JSON plus efficace et plus pratique.
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!