Go에서 두 번째 수준 중첩 JSON에 대한 반복/반복
이 질문에는 Go에서 복잡한 중첩 JSON 구조를 반복하는 작업이 포함됩니다. 두 번째 중첩 수준에 있습니다. JSON 입력에는 여러 수준의 중첩된 개체 및 배열이 포함되어 있으며 작업은 이러한 중첩된 구조 내의 키-값 쌍에 액세스하고 처리하는 것입니다.
JSON 및 초기 루프 구문 분석
제공된 코드는 인코딩/json 패키지를 사용하여 JSON 입력을 map[string]interface{} 객체로 구문 분석합니다. 이 맵은 JSON 계층 구조의 최상위 수준을 나타냅니다. range` 루프를 사용하여 맵의 첫 번째 수준 키-값 쌍을 반복합니다.
for firstLvlkey, firstLvlValue := range m { // process first-level key and value... }
두 번째 수준 반복: 사용자 정의
첫 번째 수준 루프에서 코드는 innerJSON1 및 InnerJSON2와 같은 두 번째 수준 중첩 JSON 개체를 반복하려고 합니다. 이를 달성하려면 각 첫 번째 수준 키의 인터페이스{} 값을 확인하고 그에 따라 처리해야 합니다.
이를 처리하는 효율적인 방법은 유형 어설션을 통해, 유형 스위치를 사용하여 인터페이스 유형을 결정하는 것입니다.{ } 값. 중첩된 맵이나 배열에 대해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 중국어 웹사이트의 기타 관련 기사를 참조하세요!