Bagaimana Go Boleh Mengendalikan Jenis Medan JSON Dinamik Semasa Unmarshaling?

Patricia Arquette
Lepaskan: 2024-11-24 00:54:09
asal
211 orang telah melayarinya

How Can Go Handle Dynamic JSON Field Types During Unmarshaling?

Mengendalikan Jenis Medan JSON Dinamik dalam Go

Apabila menyahmarshall JSON dalam Go ke dalam struct, seseorang mungkin menghadapi ketidakkonsistenan dalam jenis nilai sesuatu kunci khusus merentas permintaan API. Cabaran ini timbul apabila pelayan menghantar struktur objek yang berbeza atau rujukan rentetan untuk kunci yang sama. Ini boleh menimbulkan masalah kerana Go memerlukan struktur tetap untuk unmarshaling.

Untuk menangani isu ini, pendekatan jenis dinamik menggunakan jenis antara muka boleh digunakan. Pertimbangkan data JSON berikut:

{
  "mykey": [
    {obj1}, 
    {obj2}
  ]
}
Salin selepas log masuk

Untuk menangkap sifat dinamik ini, kita boleh mentakrifkan struct seperti berikut:

type Data struct {
    MyKey []interface{} `json:"mykey"`
}
Salin selepas log masuk

Apabila JSON dengan nilai rentetan ditemui, seperti:

{
  "mykey": [
    "/obj1/is/at/this/path", 
    "/obj2/is/at/this/other/path"
  ]
}
Salin selepas log masuk

Elemen kepingan MyKey akan dinyahkodkan sebagai rentetan. Untuk objek, ia akan dinyahkodkan sebagai nilai peta[rentetan]antara muka{}. Perbezaan ini boleh dibuat menggunakan suis jenis:

for i, v := range data.MyKey {
    switch x := v.(type) {
    case string:
        fmt.Println("Got a string: ", x)
    case map[string]interface{}:
        fmt.Printf("Got an object: %#v\n", x)
    }
}
Salin selepas log masuk

Dengan menyahmarshaling JSON ke dalam jenis antara muka dan menggunakan suis jenis, pembangun Go boleh mengendalikan jenis medan dinamik dan menghuraikan data dengan sewajarnya, tanpa mengira struktur yang disediakan oleh pelayan.

Atas ialah kandungan terperinci Bagaimana Go Boleh Mengendalikan Jenis Medan JSON Dinamik Semasa Unmarshaling?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan