문자열을 Go 구조체 필드로 역정렬화할 수 없습니다
Docker API 응답을 역직렬화하려고 하면 "json: 문자열을 Go로 역정렬화할 수 없습니다"라는 오류가 발생합니다. 구조체 필드 .v1Compatibility"가 발생합니다. JSON 구조는 v1Compatibility 필드를 문자열로 정의하지만 실제 응답에는 해당 필드 내에 JSON 문자열이 포함됩니다.
이 문제를 해결하려면 2단계 역마샬링 접근 방식이 필요합니다.
수정된 Go 구조체는 다음과 같습니다.
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"` }
원시 JSON 문자열을 언마샬링한 후 V1Compatibility 필드를 구문 분석된 데이터로 업데이트할 수 있습니다. :
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 }
이 2단계 접근 방식은 문자열 필드가 다음과 같은 상황을 효과적으로 처리합니다. JSON 응답에는 중첩된 JSON 콘텐츠가 포함되어 있습니다.
위 내용은 Go의 문자열 필드 내에서 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!