Go Unmarshal で複雑な JSON を解析する方法: 内部の仕組みを明らかにする
Go のエンコーディング/json パッケージは、json.Unmarshal を提供します。 JSON 解析タスクを簡素化する関数。ただし、複雑な JSON 構造に遭遇するのは困難な場合があります。
インターフェースへのデコード{}
不明な JSON データの場合は、Unmarshal を使用してインターフェースにデコードできます。{} 。このアプローチにより、キーが文字列、値がインターフェース タイプの Map[string]interface{} 値が生成されます。
たとえば、次の JSON を考えてみましょう。
{ "k1" : "v1", "k2" : "v2", "k3" : 10, "result" : [ [ ["v4", v5, {"k11" : "v11", "k22" : "v22"}] , ... , ["v4", v5, {"k33" : "v33", "k44" : "v44"} ] ], "v3" ] }
The Goこのデータをデコードしてアクセスするコード:
package main import ( "encoding/json" "fmt" ) func main() { b := []byte(`{ "k1" : "v1", "k3" : 10, result:["v4",12.3,{"k11" : "v11", "k22" : "v22"}] }`) var f interface{} err := json.Unmarshal(b, &f) if err != nil { fmt.Println(err) return } m := f.(map[string]interface{}) for k, v := range m { switch vv := v.(type) { case string: fmt.Println(k, "is string", vv) case int: fmt.Println(k, "is int", vv) case []interface{}: fmt.Println(k, "is an array:") for i, u := range vv { fmt.Println(i, u) } default: fmt.Println(k, "is of a type I don't know how to handle") } } }
インターフェイスの型をアサートし、型スイッチを利用することで、次のことが可能になります。ナビゲート
以上が`json.Unmarshal` を使用して Go で複雑な JSON 構造を効果的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。