Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyelesaikan \'json: tidak boleh unmarshal rentetan ke dalam medan Go struct\' Ralat dalam Penyahkodan Manifes Docker?

Bagaimana untuk Menyelesaikan \'json: tidak boleh unmarshal rentetan ke dalam medan Go struct\' Ralat dalam Penyahkodan Manifes Docker?

DDD
Lepaskan: 2024-11-26 21:30:11
asal
746 orang telah melayarinya

How to Resolve

"tidak boleh menyahmarshal rentetan ke dalam medan struct Go" Ralat dalam Penyahkodan Manifes

Semasa menyahsiri respons JSON daripada Docker API, ralat " json: tidak boleh membuka rentetan ke dalam medan Go struct .v1Keserasian jenis struct { rentetan ID "json:"id"; Rentetan induk "json:"parent"; Rentetan yang dibuat "json:"created""}" ditemui.

Isu ini berpunca daripada ketidakpadanan antara struktur respons dan definisi struct Go. Khususnya, medan "v1Compatibility" dalam respons JSON ialah rentetan yang mengandungi kandungan JSON bersarang. Struk Go menjangkakan ia sebagai struct Go asli, yang membawa kepada ralat unmarshalling.

Untuk menyelesaikan masalah ini, pendekatan unmarshalling dua hala boleh digunakan:

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"`
}
Salin selepas log masuk

Semasa yang pertama lulus, tindak balas JSON tidak dikawal ke dalam struct ManifestResponse dengan medan V1CompatibilityRaw dihuni:

var jsonManResp ManifestResponse
if err := json.Unmarshal([]byte(response), &jsonManResp); err != nil {
    log.Fatal(err)
}
Salin selepas log masuk

Dalam laluan kedua, setiap nilai rentetan V1CompatibilityRaw tidak digabungkan ke dalam struct V1Compatibility yang sepadan:

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
}
Salin selepas log masuk

Dengan mengendalikan kandungan JSON bersarang dengan cara ini, ralatnya ialah diselesaikan, dan data yang betul dibongkar ke dalam struct Go.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan \'json: tidak boleh unmarshal rentetan ke dalam medan Go struct\' Ralat dalam Penyahkodan Manifes Docker?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan