알 수 없는 키와 복잡한 중첩 구조가 있는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!