Bagaimana untuk Menyahmarshal JSON dengan Pasangan Kunci/Nilai Arbitrari ke dalam Struct in Go?

DDD
Lepaskan: 2024-10-26 16:35:30
asal
822 orang telah melayarinya

How to Unmarshal JSON with Arbitrary Key/Value Pairs into a Struct in Go?

Unmarshal JSON dengan Arbitrary Key/Value Pairs to Struct

Banyak soalan yang sama telah ditanya mengenai unmarshalling JSON dengan pasangan kunci/nilai yang tidak diketahui/arbitrari ke dalam struct. Walau bagaimanapun, tiada penyelesaian yang ditemui menyediakan kaedah yang mudah dan elegan untuk mencapainya.

Pernyataan Masalah

Kami mempunyai rentetan JSON yang mengandungi medan yang diketahui (sentiasa ada) dan bilangan yang tidak diketahui/ bidang sewenang-wenangnya. Contoh:

<code class="json">{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}</code>
Salin selepas log masuk

Dalam contoh ini, known1 dan known2 ialah medan yang diketahui, manakala unknown1 dan unknown2 ialah medan arbitrari. Medan yang tidak diketahui boleh mempunyai sebarang nama (kunci) dan nilai (rentetan, bool, float64, atau int).

Matlamat kami ialah mencari cara idiomatik untuk menghuraikan mesej JSON sedemikian ke dalam struct.

Penyelesaian yang Dicadangkan

Kita boleh mentakrifkan struct berikut:

<code class="go">type Message struct {
    Known1   string `json:"known1"`
    Known2   string `json:"known2"`
    Unknowns []map[string]interface{}
}</code>
Salin selepas log masuk

Dengan struct ini, sampel mesej JSON harus menghasilkan hasil berikut:

{Known1:foo Known2:bar Unknowns:[map[unknown1:car] map[unknown2:1]]}
Salin selepas log masuk

Penyelesaian Alternatif

Pilihan lain ialah menyahmarshal JSON ke dalam peta[rentetan]antara muka{}:

<code class="go">import (
    "encoding/json"
    "fmt"
)

func main() {
    jsonMsg := `{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}`
    var msg map[string]interface{}
    fmt.Println(json.Unmarshal([]byte(jsonMsg), &msg))
    fmt.Printf("%+v", msg)
}</code>
Salin selepas log masuk

Ini akan menghasilkan:

<nil>
map[known1:foo known2:bar unknown1:car unknown2:1]
Salin selepas log masuk

Kelebihan daripada pendekatan ini ialah kita boleh mengulangi kekunci dan nilai dan melaksanakan penegasan jenis yang diperlukan untuk mengendalikan data. Kami mungkin atau mungkin tidak mengisi struct dengan data bergantung pada keperluan kami.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal JSON dengan Pasangan Kunci/Nilai Arbitrari ke dalam Struct in Go?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan