Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Menghuraikan JSON dengan Pasangan Kunci/Nilai Diketahui dan Tidak Diketahui ke dalam Go Struct?

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

DDD
DDDasal
2024-10-28 02:13:30369semak imbas

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>

Nyahmarsle rentetan JSON ke dalam struct ini:

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

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!

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