未知のキーと複雑なネスト構造を含む 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 }
この例に示すように、サーバー名 (Server[0-9].example.com) は事前に決定されておらず、変更される可能性があります。さらに、サーバー名に続くフィールドには明示的なキーがありません。
このデータを効果的に取得するには、map[string]ServerStruct 構造を使用できます。
type YourStruct struct { Success bool ResponseMS int Servers map[string]*ServerStruct } type ServerStruct struct { Application string Owner string [...] }
これらの構造を組み込むことで、マップへの不明なサーバー名の割り当てが可能になります。
JSON のアンマーシャリングをさらに効率的に行うには、必要な JSON タグを追加することを検討してください。
import "encoding/json" // YourStruct contains the JSON structure with success, response time, and a map of servers type YourStruct struct { Success bool ResponseMS int `json:"response_ms"` Servers map[string]*ServerStruct `json:"message"` } // ServerStruct holds server information, including application, owner, etc. type ServerStruct struct { Application string `json:"application"` Owner string `json:"owner"` [...] } // UnmarshalJSON is a custom unmarshaller that handles nesting and unknown keys func (s *YourStruct) UnmarshalJSON(data []byte) error { type YourStructHelper struct { Success bool ResponseMS int `json:"response_ms"` Servers map[string]ServerStruct `json:"message"` } var helper YourStructHelper if err := json.Unmarshal(data, &helper); err != nil { return err } s.Success = helper.Success s.ResponseMS = helper.ResponseMS s.Servers = make(map[string]*ServerStruct) for k, v := range helper.Servers { s.Servers[k] = &v // Explicitly allocate memory for each server } return nil }
これらの調整により、提供された JSON をカスタム構造体に効果的にアンマーシャリングし、簡単なデータ操作への道を開くことができます。
以上が不明なキーを使用してネストされた JSON をアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。