json.Unmarshal 操作オブジェクトは [] バイトです。これは、処理されたすべての JSON をメモリにロードする必要があることを意味します。
ロードされた JSON がある場合は、json.Unmarshal を使用した方が高速です。 (推奨学習: go )
json.decoderは、io.readerインターフェイスを実装するストリームまたはその他のタイプを操作します。つまり、受信または送信中に解析できるということです。より大きなデータセットを処理するときに、JSON 全体をメモリに再コピーする必要はありません。
最良の選択は次のとおりです:
データが io.Reader から取得された場合、またはストリームからデータを読み取る必要がある場合は、json.Decoder を選択します。
JSON 全体がメモリに読み込まれている場合は、json.Unmarshal を使用してください。不定の型解析
不定のフィールドを持つ JSON に遭遇した場合、判断する必要がある場合があります。同時に分析します。例:t1 := `{"type":"a", id:"aaa"}`t2 := `{"type":"b", id:22222}`
インターフェースへのアンマーシャリング{}
最初にインターフェースへのアンマーシャリングを行ってから、後続の処理を実行する前にキー フィールドを決定できます。{}type Data struct { Type string `json:"type"` Id interface{} `json:"id"`}func decode(t string) { var x Data err := json.Unmarshal([]byte(t), &x) if err != nil { panic(err) } if x.Type == "a" { fmt.Println(x.Id.(string)) } else { fmt.Println(x.Id.(float64)) //json解析中number默认作为float64解析 } }func main() { t1 := `{"type":"a", "id":"aaa"}` t2 := `{"type":"b", "id":22222}` decode(t1) decode(t2) }
結果
aaa 22222
以上がgolangの不規則なJSON解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。