ホームページ >バックエンド開発 >Golang >Go で構造的に類似した要素を持つネストされた JSON をアンマーシャリングする方法

Go で構造的に類似した要素を持つネストされた JSON をアンマーシャリングする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 06:49:13454ブラウズ

How to Unmarshal Nested JSON with Structurally Similar Elements in Go?

入れ子と構造的類似性による JSON のアンマーシャリング

複雑な JSON 構造を扱う場合、構造体の 1 つの要素が構造体自体と同じ型です。これにより、アンマーシャリング プロセス中に問題が発生する可能性があります。

この特定のケースでは、データベース構成の配列を表す JSON 文字列が与えられます。各データベース構成には、レプリカのリストを含むさまざまな属性が含まれています。各レプリカは、データベース構成と同様の属性を持つ JSON オブジェクトでもあります。

この JSON 文字列をアンマーシャリングするには、ネストと構造の類似性に対応できるデータ構造が必要です。

動的タイプを使用したネストされた構造のモデル化

JSON 入力は DBS のスライスではないため構造体を使用する場合、その構造をキャプチャするには、より柔軟なデータ型が必要です。 Map[string]interface{} は、キーと値のペアを動的な値で表現できるため、優れたオプションです。

例:

type DBS struct {
    URL      string
    Port     string
    Uname    string
    Pass     string
    Authdb   string
    Replicas []DBS
}

func main() {
    raw, err := ioutil.ReadFile("./config.json")
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }

    var config []map[string]interface{}
    json.Unmarshal(raw, &config)

    for _, db := range config {
        d, ok := db["db"]
        if !ok {
            // Handle the case where "db" is missing
        }

        db := d.(map[string]interface{})
        url := db["url"].(string)
        port := db["port"].(string)

        var replicas []DBS
        for _, replica := range db["replicas"] {
            replicas = append(replicas, mapToDBS(replica))
        }

        // ... Other operations
    }
}

動的タイプを使用した JSON の解析

この例では、 config 変数はマップのスライスであり、データベース構成をキーと値のペアとして保持できます。

データベース構成ごとに、"db" サブオブジェクトを作成し、それを map[string]interface{} にキャストします。これにより、"url""port" などの個々の属性にアクセスできるようになります。

"replicas" 属性も同様に処理されます。各レプリカは JSON オブジェクトであるため、mapToDBS() 関数を使用して DBS 構造体に変換できます。

動的型の柔軟性を活用することで、 JSON 文字列を効果的にアンマーシャリングし、そのネストされた構造を解析できます。

以上がGo で構造的に類似した要素を持つネストされた JSON をアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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