大規模データの JSON 配列のストリーミング
大規模な JSON 配列をメモリにデコードすると、メモリの問題が発生する可能性があります。これに対処するには、JSON 要素のストリーミングがより効率的なソリューションです。
Go のエンコーディング/json パッケージは、JSON データを要素ごとにストリーミングするメカニズムを提供します。拡張例は次のとおりです:
package main import ( "encoding/json" "fmt" "log" "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)) // Read the opening bracket. t, err := dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) // Loop through the array elements. for dec.More() { var m Message // Decode the current element. err = dec.Decode(&m) if err != nil { log.Fatal(err) } fmt.Printf("%v: %v\n", m.Name, m.Text) } // Read the closing bracket. t, err = dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) }
この例では、JSON 配列の開始括弧と終了括弧を明示的に処理し、各要素を個別にデコードして、メモリ オーバーヘッドなしで JSON データを効率的にストリーミングできるようにします。
以上がGo で大規模な JSON 配列を効率的にストリーミングおよびデコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。