"Go 구조체 필드로 문자열을 역마샬링할 수 없습니다." 매니페스트 디코딩 오류
Docker API에서 JSON 응답을 역직렬화하는 동안 " json: 문자열을 Go 구조체 필드로 역마샬링할 수 없습니다. struct { ID 문자열 유형의 v1Compatibility "json:"ID"; 상위 문자열 "json:"parent"; 생성된 문자열 "json:"created""}"가 발견되었습니다.
이 문제는 응답 구조와 Go 구조체 정의 간의 불일치로 인해 발생합니다. 특히 JSON 응답의 "v1Compatibility" 필드는 중첩된 JSON 콘텐츠를 포함하는 문자열입니다. Go 구조체는 그것이 언마샬링 오류로 이어지는 네이티브 Go 구조체일 것으로 예상합니다.
이 문제를 해결하려면 2단계 언마샬링 접근 방식을 사용할 수 있습니다.
type ManifestResponse struct { Name string `json:"name"` Tag string `json:"tag"` Architecture string `json:"architecture"` FsLayers []FSLayer `json:"fsLayers"` History []HistEntry } type FSLayer struct { BlobSum string `json:"blobSum"` } type HistEntry struct { V1CompatibilityRaw string `json:"v1Compatibility"` V1Compatibility V1Compatibility `json:"-"` } type V1Compatibility struct { ID string `json:"id"` Parent string `json:"parent"` Created string `json:"created"` }
첫 번째 단계에서 통과하면 JSON 응답이 V1CompatibilityRaw 필드를 사용하여 ManifestResponse 구조체로 역마샬링됩니다. 채워짐:
var jsonManResp ManifestResponse if err := json.Unmarshal([]byte(response), &jsonManResp); err != nil { log.Fatal(err) }
두 번째 패스에서 각 V1CompatibilityRaw 문자열 값은 해당 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 }
이러한 방식으로 중첩된 JSON 콘텐츠를 처리하면 오류가 발생합니다. 해결되고 올바른 데이터가 Go 구조체로 역마샬링됩니다.
위 내용은 Docker 매니페스트 디코딩 시 \'json: 문자열을 Go 구조체 필드로 역마샬링할 수 없습니다\' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!