Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah saya boleh membongkar data JSON bersarang tanpa mengetahui strukturnya?

Bagaimanakah saya boleh membongkar data JSON bersarang tanpa mengetahui strukturnya?

Patricia Arquette
Lepaskan: 2024-11-02 16:55:03
asal
458 orang telah melayarinya

How can I unmarshal nested JSON data without knowing its structure?

Menyahmarshalling Nested JSON Tanpa Struktur Diketahui

Apabila menemui data JSON bersarang tanpa struktur yang ditentukan, terdapat beberapa pendekatan untuk mengurangkan cabaran dalam unmarshalling.

Mengelakkan Unmarshal Berulang

Meminimumkan operasi unmarshalling biasanya dinasihatkan. Pertimbangkan untuk melaksanakan mekanisme caching untuk menyimpan objek unmarshall untuk kegunaan masa hadapan dan mengelakkan unmarshalling berulang. Walau bagaimanapun, dalam beberapa kes, beberapa unmarshalling mungkin perlu, terutamanya apabila berurusan dengan struktur bersarang dari pelbagai jenis.

Menentukan Struktur yang Betul untuk Unmarshalling

Kaedah 1: Nyahmarshal untuk memetakan[rentetan]antaramuka{}

Nyahmarshal json.RawMessage ke dalam peta[rentetan]antaramuka{}. Ini membolehkan pemeriksaan struktur bersarang untuk mengenal pasti jenis dan, seterusnya, struktur yang betul untuk dibongkar.

Contoh:

<code class="go">var objMap map[string]interface{}
json.Unmarshal(rawMessage, &objMap)</code>
Salin selepas log masuk

Kaedah 2 : Padanan Ungkapan Biasa

Gunakan ungkapan biasa untuk memadankan rentetan jenis dalam data JSON. Setelah jenis diketahui, gunakan pantulan atau suis jenis untuk menyahmarshal ke dalam struct yang sepadan.

Contoh:

<code class="go">type Regex *regexp.Regexp

// Split the JSON data into key-value pairs
type KeyValue struct {
    Key   string
    Value string
}

// Regex for extracting the type
var typeRE = Regex(regexp.MustCompile(`(?m)^.*"type": "(.+)".*$`))

// Unmarshal the raw message and extract the type
func getType(rawMessage []byte) (string, error) {
    var data KeyValue
    err := json.Unmarshal(rawMessage, &data)
    if err != nil {
        return "", err
    }
    matches := typeRE.FindStringSubmatch(data.Value)
    return matches[1], nil
}</code>
Salin selepas log masuk

Menggunakan Salinan atau Biasa Pendekatan Ekspresi

Kaedah A: Salin dan Nyahmarshal

  1. Buat salinan json.RawMessage.
  2. Nyahmarshal salinan ke dalam antara muka{} untuk mengenal pasti jenis.
  3. Nyahmarshal json asal.RawMessage ke dalam struct jenis yang ditentukan.

Kaedah B: Ekspresi Biasa dan Unmarshal

  1. Gunakan ungkapan biasa untuk menentukan jenis.
  2. Gunakan pantulan atau suis jenis untuk mencipta tika baharu struct dengan jenis yang ditentukan.
  3. Nyahmarshal json.RawMessage ke dalam struct yang baru dibuat.

Atas ialah kandungan terperinci Bagaimanakah saya boleh membongkar data JSON bersarang tanpa mengetahui strukturnya?. 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