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
其他注意事項
以上是如何在 Go 中高效地迭代二級巢狀 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!