ホームページ >バックエンド開発 >Golang >`json.Unmarshal` を使用して Go で複雑な JSON 構造を効果的に解析するにはどうすればよいですか?

`json.Unmarshal` を使用して Go で複雑な JSON 構造を効果的に解析するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-03 13:41:43825ブラウズ

How to Effectively Parse Complex JSON Structures in Go Using `json.Unmarshal`?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。