Bagaimana untuk Cekap Berulang Melalui JSON Bersarang dalam Go?

Patricia Arquette
Lepaskan: 2024-11-26 10:46:11
asal
583 orang telah melayarinya

How to Efficiently Iterate Through Nested JSON in Go?

Menggelung/Membalas Melepasi JSON Bersarang Tahap Kedua dalam Go Lang

Pertimbangkan senario di mana anda menghadapi struktur JSON bersarang seperti yang digambarkan di bawah:

{
    "outterJSON": {
        "innerJSON1": {
            "value1": 10,
            "value2": 22,
            "InnerInnerArray": [ "test1" , "test2"],
            "InnerInnerJSONArray": [ {"fld1" : "val1"} , {"fld2" : "val2"} ]
        },
        "InnerJSON2":"NoneValue"
    }
}
Salin selepas log masuk

Tugasnya adalah untuk melelaran secara berkesan melalui struktur ini dan mendapatkan semula semua pasangan nilai kunci sebagai rentetan untuk pemprosesan selanjutnya. Malangnya, mentakrifkan struktur secara manual untuk input JSON dinamik sedemikian tidak boleh dilaksanakan.

Pendekatan Lelaran Cekap

Untuk menavigasi cabaran ini dengan cekap, pendekatan rekursif digunakan:

func parseMap(m map[string]interface{}) {
  for key, val := range m {
    // Check the type of the value
    switch concreteVal := val.(type) {
      case map[string]interface{}:
        // If it's a nested map, recursively call the function
        parseMap(val.(map[string]interface{}))
      case []interface{}:
        // If it's a nested array, call the function to parse the array
        parseArray(val.([]interface{}))
      default:
        // For all other types, print the key and value as a string
        fmt.Println(key, ":", concreteVal)
    }
  }
}
Salin selepas log masuk

Fungsi rekursif parseMap ini mengkaji jenis setiap nilai dalam peta. Jika nilai itu sendiri adalah peta, ia secara rekursif memanggil parseMap untuk melintasi peta bersarang itu. Jika nilainya ialah tatasusunan, ia memanggil parseArray untuk mengulanginya. Untuk semua jenis lain (seperti rentetan, nombor, dll.), ia hanya mencetak kunci dan nilai sebagai rentetan.

Demo

Pertimbangkan contoh input JSON yang disediakan sebelum ini. Menjalankan kod di bawah akan menghasilkan output berikut:

func parseArray(a []interface{}) {
  for i, val := range a {
    // Check the type of the value
    switch concreteVal := val.(type) {
      case map[string]interface{}:
        // If it's a nested map, recursively call the function
        parseMap(val.(map[string]interface{}))
      case []interface{}:
        // If it's a nested array, call the function to parse the array
        parseArray(val.([]interface{}))
      default:
        // For all other types, print the index and value as a string
        fmt.Println("Index:", i, ":", concreteVal)
    }
  }
}

const input = `
{
    "outterJSON": {
        "innerJSON1": {
            "value1": 10,
            "value2": 22,
            "InnerInnerArray": [ "test1" , "test2"],
            "InnerInnerJSONArray": [{"fld1" : "val1"} , {"fld2" : "val2"}]
        },
        "InnerJSON2":"NoneValue"
    }
}
`
Salin selepas log masuk

Output:

//outterJSON
//innerJSON1
//InnerInnerJSONArray
//Index: 0
//fld1 : val1
//Index: 1
//fld2 : val2
//value1 : 10
//value2 : 22
//InnerInnerArray
//Index 0 : test1
//Index 1 : test2
//InnerJSON2 : NoneValue
Salin selepas log masuk

Pendekatan ini secara berkesan menangkap semua pasangan nilai kunci dalam JSON bersarang, menjadikannya sesuai untuk pemprosesan dan tugas pengekstrakan dalam Go lang.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Berulang Melalui JSON Bersarang dalam Go?. 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