중첩 구조로 JSON 역마샬링
복잡한 JSON 응답으로 작업할 때 때때로 "문자열을 Go 구조체 필드로 역마샬링할 수 없습니다"와 같은 오류가 발생할 수 있습니다. ". 이는 일반적으로 JSON 응답에 다른 JSON 구조를 나타내는 문자열 값이 포함된 경우에 발생합니다.
이 불완전한 Go 구조체 ManifestResponse 및 해당 JSON 응답을 고려하세요.
type ManifestResponse struct { Name string `json:"name"` Tag string `json:"tag"` Architecture string `json:"architecture"` FsLayers []struct { BlobSum string `json:"blobSum"` } `json:"fsLayers"` History []struct { V1Compatibility struct { ID string `json:"id"` Parent string `json:"parent"` Created string `json:"created"` } `json:"v1Compatibility"` } `json:"history"` }
{ "name": "library/redis", "tag": "latest", "architecture": "amd64", "history": [ { "v1Compatibility": "{\"id\":\"ef8a93741134ad37c834c32836aefbd455ad4aa4d1b6a6402e4186dfc1feeb88\",\"parent\":\"9c8b347e3807201285053a5413109b4235cca7d0b35e7e6b36554995cfd59820\",\"created\":\"2017-10-10T02:53:19.011435683Z\"}" } ] }
JSON을 Go 구조체로 역마샬링하면 다음 오류가 발생할 수 있습니다.
json: cannot unmarshal string into Go struct field .v1Compatibility of type struct { ID string "json:\"id\""; Parent string "json:\"parent\""; Created string "json:\"created\"" }
이 문제는 다음에서 비롯됩니다. JSON 응답의 v1Compatibility는 JSON 콘텐츠가 포함된 문자열 값이라는 사실입니다. 이 문제를 해결하기 위해 2단계 역마샬링을 구현할 수 있습니다.
type ManifestResponse struct { Name string `json:"name"` Tag string `json:"tag"` Architecture string `json:"architecture"` FsLayers []struct { BlobSum string `json:"blobSum"` } `json:"fsLayers"` History []struct { V1CompatibilityRaw string `json:"v1Compatibility"` V1Compatibility V1Compatibility } `json:"history"` } type V1Compatibility struct { ID string `json:"id"` Parent string `json:"parent"` Created string `json:"created"` }
그런 다음 다음 역마샬링 프로세스를 수행합니다.
var jsonManResp ManifestResponse if err := json.Unmarshal([]byte(exemplar), &jsonManResp); err != nil { log.Fatal(err) } for i := range jsonManResp.History { var comp V1Compatibility if err := json.Unmarshal([]byte(jsonManResp.History[i].V1CompatibilityRaw), &comp); err != nil { log.Fatal(err) } jsonManResp.History[i].V1Compatibility = comp }
이 접근 방식을 사용하면 중첩된 JSON 구조를 2단계로 처리할 수 있습니다. -단계 역마샬링 프로세스를 통해 "문자열을 Go 구조체 필드로 역마샬링할 수 없습니다." 오류를 방지합니다.
위 내용은 중첩된 JSON 구조를 처리하고 \'cannot unmarshal string into Go struct field\' 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!