ホームページ >バックエンド開発 >Golang >Go を使用して動的キーを使用してネストされた JSON をアンマーシャリングする方法

Go を使用して動的キーを使用してネストされた JSON をアンマーシャリングする方法

DDD
DDDオリジナル
2024-11-22 06:52:15253ブラウズ

How to Unmarshal Nested JSON with Dynamic Keys Using Go?

動的キーを使用したネストされた JSON のアンマーシャリング

複雑な JSON 構造では、キーが動的に変化するネストされたオブジェクトに遭遇すると、アンマーシャリング中に問題が発生する可能性があります。次の JSON データを考えてみましょう:

{
  "message": {
    "Server1.example.com": [
      {
        "application": "Apache",
        "host": {
          "name": "/^Server-[13456]/"
        },
        "owner": "User1",
        "project": "Web",
        "subowner": "User2"
      }
    ],
    "Server2.example.com": [
      {
        "application": "Mysql",
        "host": {
          "name": "/^Server[23456]/"
        },
        "owner": "User2",
        "project": "DB",
        "subowner": "User3"
      }
    ]
  },
  "response_ms": 659,
  "success": true
}

解決策:

このような JSON を効果的にアンマーシャリングするには、動的キーを持つネストされたオブジェクトに map[string]ServerStruct を使用することを検討してください。 。このアプローチでは、名前が不明な複数のサーバーを含めることができます。

更新された構造体の例を次に示します:

type YourStruct struct {
    Success bool
    ResponseMS int
    Servers map[string]*ServerStruct
}

type ServerStruct struct {
    Application string
    Owner string
    [...]
}

JSON タグを追加することで、デコーダに特定の JSON をマップするように指示できます。フィールドを対応する構造体フィールドに追加します。更新されたタグは次のとおりです。

type YourStruct struct {
    Success  `json:"success"`
    ResponseMS `json:"response_ms"`
    Servers  `json:"-"`
}

type ServerStruct struct {
    Application string `json:"application"`
    Owner string `json:"owner"`
    [...]
}

「Servers」フィールドの json:"-" タグにより、デコーダは JSON フィールドを「ServerStruct」フィールドに直接マッピングすることをスキップします。代わりに、フィールドを map[string]ServerStruct にマップします。

このアプローチは、動的キーを使用してネストされた JSON オブジェクトをアンマーシャリングするための柔軟なソリューションを提供し、各サーバー オブジェクト内のデータに簡単にアクセスできるようにします。

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

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