아래에 설명된 것과 같은 중첩 JSON 구조가 발생하는 시나리오를 고려해 보세요.
{ "outterJSON": { "innerJSON1": { "value1": 10, "value2": 22, "InnerInnerArray": [ "test1" , "test2"], "InnerInnerJSONArray": [ {"fld1" : "val1"} , {"fld2" : "val2"} ] }, "InnerJSON2":"NoneValue" } }
이 작업은 이 구조를 효과적으로 반복하고 추가 처리를 위해 모든 키-값 쌍을 문자열로 검색하는 것입니다. 불행하게도 이러한 동적 JSON 입력에 대한 구조체를 수동으로 정의하는 것은 불가능합니다.
이 문제를 효율적으로 탐색하기 위해 재귀 접근 방식이 사용됩니다.
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) } } }
이 재귀 함수인parseMap은 맵에 있는 각 값의 유형을 검사합니다. 값 자체가 맵인 경우, 해당 중첩 맵을 탐색하기 위해 재귀적으로 ParseMap을 호출합니다. 값이 배열이면 이를 반복하기 위해parseArray를 호출합니다. 다른 모든 유형(예: 문자열, 숫자 등)의 경우 간단히 키와 값을 문자열로 인쇄합니다.
앞서 제공된 JSON 입력 예시를 고려해 보세요. 아래 코드를 실행하면 다음과 같은 출력이 생성됩니다.
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" } } `
출력:
//outterJSON //innerJSON1 //InnerInnerJSONArray //Index: 0 //fld1 : val1 //Index: 1 //fld2 : val2 //value1 : 10 //value2 : 22 //InnerInnerArray //Index 0 : test1 //Index 1 : test2 //InnerJSON2 : NoneValue
이 접근 방식은 중첩된 JSON 내의 모든 키-값 쌍을 효과적으로 캡처하여 처리 및 작업에 적합합니다. Go lang에서 추출 작업을 수행합니다.
위 내용은 Go에서 중첩된 JSON을 통해 효율적으로 반복하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!