大規模な JSON ファイルのストリーミング
ファイルから大規模な JSON 配列をデコードすると、すべてのデータを一度にロードしようとするとメモリの問題が発生する可能性があります。この課題に対処するには、ストリーミング技術を使用できます。
この例では、大規模な JSON ファイルで json.Unmarshal を利用すると、配列全体の読み込みによりメモリが枯渇します。
これを回避するにはの場合は、JSON 要素を順次ストリーミングすることを検討してください。 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) } }
要素をストリーミングすることにより、コードは要素を順番に処理し、メモリ消費を削減します。この例は文字列入力に基づいていることに注意してください。必要に応じてファイルから読み取るように変更できます。
以上がメモリの枯渇を避けるために、Go で大きな JSON ファイルを効率的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。