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
Kaedah B: Ekspresi Biasa dan Unmarshal
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!