>백엔드 개발 >Golang >Go에서 중첩된 JSON을 통해 효율적으로 반복하는 방법은 무엇입니까?

Go에서 중첩된 JSON을 통해 효율적으로 반복하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-26 10:46:11609검색

How to Efficiently Iterate Through Nested JSON in Go?

Go Lang에서 두 번째 수준 중첩 JSON에 대한 반복/반복

아래에 설명된 것과 같은 중첩 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.