文字列を 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 フィールドは解析されたもので更新できます。 data:
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 中国語 Web サイトの他の関連記事を参照してください。