중첩 문자열로 JSON 역마샬링
"문자열을 Go 구조체 필드로 역마샬링할 수 없습니다."라는 오류가 발생하면 JSON이 구문 분석에는 구조체로 예상되는 필드 내에 문자열 값이 포함되어 있습니다. 이 문제를 해결하려면 다음 접근 방식을 고려하십시오.
import ( "encoding/json" "fmt" "log" ) 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"` } func main() { exemplar := `{ "schemaVersion": 1, "name": "library/redis", "tag": "latest", "architecture": "amd64", "history": [ { "v1Compatibility": "{\"id\":\"ef8a93741134ad37c834c32836aefbd455ad4aa4d1b6a6402e4186dfc1feeb88\",\"parent\":\"9c8b347e3807201285053a5413109b4235cca7d0b35e7e6b36554995cfd59820\",\"created\":\"2017-10-10T02:53:19.011435683Z\"}" } ] } ` 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 } fmt.Println(jsonManResp) }
이 업데이트된 코드에서는 V1CompatibilityRaw를 ManifestResponse.History 내의 문자열 필드로 선언한 다음 이를 V1Compatibility 구조체로 수동으로 역마샬링합니다.
이 접근 방식을 사용하면 JSON 응답을 원하는 Go 구조체로 적절하게 역직렬화하여 중첩된 문자열이 구문 분석되도록 할 수 있습니다. 맞습니다.
위 내용은 Go에서 언마샬링할 때 중첩된 JSON 문자열을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!