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
Patricia Arquetteasal
2024-11-02 16:55:03413semak imbas

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>

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>

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!

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