Diffusion en continu de fichiers JSON à grande échelle
Le décodage de tableaux JSON massifs à partir de fichiers peut rencontrer des problèmes de mémoire lorsque vous tentez de charger toutes les données en même temps. Pour relever ce défi, des techniques de streaming peuvent être utilisées.
Dans l'exemple fourni, l'utilisation de json.Unmarshal sur un fichier JSON volumineux entraîne un épuisement de la mémoire en raison du chargement de l'ensemble du tableau.
Pour éviter cela , envisagez de diffuser les éléments JSON de manière séquentielle. Voici une approche basée sur l'exemple de la documentation Golang :
import ( "encoding/json" "fmt" "strings" ) func main() { const jsonStream = ` [ {"Name": "Ed", "Text": "Knock knock."}, {"Name": "Sam", "Text": "Who's there?"}, {"Name": "Ed", "Text": "Go fmt."}, {"Name": "Sam", "Text": "Go fmt who?"}, {"Name": "Ed", "Text": "Go fmt yourself!"} ] ` type Message struct { Name, Text string } dec := json.NewDecoder(strings.NewReader(jsonStream)) for dec.More() { var m Message if err := dec.Decode(&m); err != nil { fmt.Println(err) return } fmt.Printf("%v: %v\n", m.Name, m.Text) } }
En diffusant les éléments en continu, le code les traite de manière séquentielle, réduisant ainsi la consommation de mémoire. Notez que cet exemple est basé sur une entrée de chaîne ; il peut être modifié pour lire à partir d'un fichier selon les besoins.
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!