首頁 >後端開發 >Golang >如何在 Go 中高效地迭代二級巢狀 JSON?

如何在 Go 中高效地迭代二級巢狀 JSON?

Linda Hamilton
Linda Hamilton原創
2024-11-30 18:23:17987瀏覽

How to Efficiently Iterate Through Second-Level Nested JSON in Go?

Looping/Iterating over Second-Level Nested JSON in Go

本題涉及在Go 中迭代複雜的嵌套JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別關注JSON 結構,特別注意JSON在第二層嵌套上。 JSON 輸入包含多層巢狀物件和數組,任務是存取和處理這些巢狀結構中的鍵值對。

解析 JSON 和初始循環

提供的程式碼使用encoding/json套件將JSON輸入解析為map[string]interface{}物件。此映射表示 JSON 層次結構的頂層。使用 range` 循環,它迭代映射中的第一級鍵值對。

for firstLvlkey, firstLvlValue := range m {
    // process first-level key and value...
}

迭代第二級:自訂

在第一級循環中,程式碼試圖迭代第二級嵌套JSON 對象,例如innerJSON1 和InnerJSON2。為了實現這一點,必須對每個一級鍵的interface{}值進行相應的檢查和處理。

處理這個問題的有效方法是透過型別斷言,使用型別開關來決定interface{的型別} 值。透過遞歸呼叫巢狀映射或陣列的 parseMap 或 parseArray 函數,程式碼可以迭代地探索 JSON 結構的所有層級。

func parseMap(aMap map[string]interface{}) {
    for key, val := range aMap {
        switch concreteVal := val.(type) {
            case map[string]interface{}:
                // Nested map
                fmt.Println(key)
                parseMap(val.(map[string]interface{}))
            case []interface{}:
                // Nested array
                fmt.Println(key)
                parseArray(val.([]interface{}))
            default:
                // Primitive value
                fmt.Println(key, ":", concreteVal)
        }
    }
}

func parseArray(anArray []interface{}) {
    for i, val := range anArray {
        switch concreteVal := val.(type) {
            case map[string]interface{}:
                // Nested map
                fmt.Println("Index:", i)
                parseMap(val.(map[string]interface{}))
            case []interface{}:
                // Nested array
                fmt.Println("Index:", i)
                parseArray(val.([]interface{}))
            default:
                // Primitive value
                fmt.Println("Index", i, ":", concreteVal)
        }
    }
}

範例輸出

基於在提供的輸入 JSON上,程式碼將從第二層列印鍵值對巢狀:

InnerInnerJSONArray
Index: 0
fld1 : val1
Index: 1
fld2 : val2
value1 : 10
value2 : 22
InnerInnerArray
Index 0 : test1
Index 1 : test2
InnerJSON2 : NoneValue

其他注意事項

  • 提供的程式碼假定JSON 結構格式良好,並且不處理無效的JSON 輸入。
  • 與已知JSON 使用類型化結構相比,使用類型反射(interface{})會增加程式的開銷
  • 對於更複雜的JSON 結構或效能最佳化,請考慮使用Go 的json.Decoder 並手動導覽JSON 層次結構。

以上是如何在 Go 中高效地迭代二級巢狀 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn