Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyahmarshal JSON dengan Pasangan Kunci/Nilai Arbitrari ke dalam Struct in Go?

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

DDD
DDDasal
2024-10-26 16:35:30722semak imbas

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>

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>

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

{Known1:foo Known2:bar Unknowns:[map[unknown1:car] map[unknown2:1]]}

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>

Ini akan menghasilkan:

<nil>
map[known1:foo known2:bar unknown1:car unknown2:1]

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!

Kenyataan:
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