Rencontrer des données JSON avec des clés inconnues et des structures d'imbrication complexes peut être une tâche ardue. Considérez le format JSON suivant :
{ "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 }
Comme illustré dans cet exemple, les noms de serveur (Server[0-9].example.com) ne sont pas prédéterminés et peuvent varier. De plus, le champ suivant les noms de serveur n'a pas de clé explicite.
Pour capturer efficacement ces données, nous pouvons utiliser une structure map[string]ServerStruct :
type YourStruct struct { Success bool ResponseMS int Servers map[string]*ServerStruct } type ServerStruct struct { Application string Owner string [...] }
En incorporant ces structures, nous permettons l'attribution de noms de serveurs inconnus dans la carte.
Pour exceller davantage dans la désorganisation du JSON, pensez à ajouter les balises JSON nécessaires :
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 }
Grâce à ces ajustements, vous pouvez efficacement désorganiser le JSON fourni dans votre structure personnalisée, ouvrant ainsi la voie à une manipulation de données sans effort.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!