ホームページ  >  記事  >  バックエンド開発  >  未知のキーと型破りなフィールド構造を含むネストされた JSON データを解析するにはどうすればよいですか?

未知のキーと型破りなフィールド構造を含むネストされた JSON データを解析するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-16 21:22:03536ブラウズ

How to Parse Nested JSON Data with Unknown Keys and Unconventional Field Structures?

不明なキーを使用したネストされた 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
}

構造はわかりにくいですが、段階的に分析することができます。最初に、「Server1.example.com」や「Server2.example.com」など、動的に変化する未知のサーバー名の存在に注目します。さらに、「host」フィールドには、囲みキーのない暗号的な正規表現が含まれています。

この課題を解明するには、指定された構造体に焦点を移しましょう。

type ServerDetails struct {
  Message  struct{
    Hostname struct{
      Details struct{
        Application string `json:"application"`
        }`json:"-"`
       }`json:"-"`
     }`json:"message"`
}

この構造体は次のように設計されています。 「メッセージ」オブジェクト内の既知のフィールドを処理できますが、さまざまなサーバー名と固有の「ホスト」をキャプチャできません。 field.

重要な洞察は、より柔軟なデータ構造、つまり、map[string]ServerStruct を利用することです。これにより、不明なサーバー名を ServerStruct 値を指すキーとして考慮できるようになります。

変更された構造体は次のようになります。

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

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

適切な JSON タグを追加すると、次のようになります。 JSON データをこの強化された構造体に正常に解析できるようになりました。

map[string]ServerStruct を使用し、JSON タグを使用したキーなしフィールドの可能性を活用することで、ネストされた JSON データの複雑な構造を効果的に解明し、必要な情報を抽出できます。

以上が未知のキーと型破りなフィールド構造を含むネストされた JSON データを解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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