大規模なストリーム JSON を効率的にデコードする
膨大な JSON 配列を一度にデコードすると、メモリの問題が発生する可能性があります。これに対処するには、要素を 1 つずつ反復処理するストリーミング アプローチを採用することをお勧めします。
要素ごとに JSON 要素をストリーミング
エンコーディング/json パッケージは次のことを行います。 JSON データをストリーミングするためのメソッド。以下に例を示します。
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!"} ]` dec := json.NewDecoder(strings.NewReader(jsonStream)) // skip the opening bracket dec.Token() // read and process each element for dec.More() { var message Message if err := dec.Decode(&message); err != nil { log.Fatal(err) } fmt.Printf("%v: %v\n", message.Name, message.Text) } // skip the closing bracket dec.Token() }
このコードでは、json.NewDecoder を使用して JSON ストリームのデコーダーを作成します。次に、ストリームを反復処理し、開始括弧と終了括弧 ({ と }) をスキップし、dec.More() を使用して、さらに処理する要素があるかどうかを確認します。
要素ごとに、Message 構造体を作成します。そして、dec.Decode を使用して JSON データをデコードします。次に、メッセージの名前フィールドとテキスト フィールドを出力します。
このアプローチにより、配列全体をメモリにロードせずに大きな JSON 配列を処理できるため、メモリ不足エラーが回避され、パフォーマンスが向上します。
以上がGo で大規模なストリーミング JSON データを効率的にデコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。