Bagaimana Menghuraikan JSON dengan Pasangan Kunci/Nilai Diketahui dan Tidak Diketahui ke dalam Go Struct?

DDD
Lepaskan: 2024-10-28 02:13:30
asal
377 orang telah melayarinya

How to Parse JSON with Known and Unknown Key/Value Pairs into a Go Struct?

Unmarshal JSON dengan Arbitrary Key/Value Pairs to Struct

Masalah

Bagaimana saya boleh menghuraikan rentetan JSON dengan pasangan kunci/nilai yang diketahui dan tidak diketahui ke dalam struct Go? Medan tidak diketahui boleh mempunyai sebarang nama dan jenis nilai (rentetan, bool, float64 atau int).

Penyelesaian

Buat struct dengan medan yang diketahui dan sekeping peta untuk medan yang tidak diketahui :

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

Nyahmarsle rentetan JSON ke dalam struct ini:

<code class="go">json.Unmarshal([]byte(jsonMsg), &msg)</code>
Salin selepas log masuk

Medan Tidak Diketahui akan mengandungi senarai peta yang mewakili pasangan kunci/nilai yang tidak diketahui.

Alternatif

  1. Double Unmarshal:

    • Pertama, unmarshal ke dalam struct sementara yang mengandungi hanya medan yang diketahui.
    • Kemudian, nyahmarshal sekali lagi ke dalam peta[rentetan]antara muka{} dan ekstrak nilai yang tidak diketahui secara manual.
  2. Unmarshal dan Penukaran Jenis:

    • Nyahmarshal ke dalam peta[rentetan]antara muka{}.
    • Lelaran di atas peta dan taip tegaskan nilai kepada jenis yang sesuai.

Pertimbangan

Ketiga-tiga penyelesaian adalah sah, tetapi yang paling mudah dan paling elegan ialah pendekatan berasaskan struct awal. Ia mengelakkan keperluan unmarshal tambahan atau penukaran jenis manual.

Atas ialah kandungan terperinci Bagaimana Menghuraikan JSON dengan Pasangan Kunci/Nilai Diketahui dan Tidak Diketahui ke dalam Go Struct?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!