Looping/Iterating over Second-Level Nested JSON in Go
本题涉及在 Go 中迭代复杂的嵌套 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中文网其他相关文章!