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

Go에서 두 번째 수준 중첩 JSON을 효율적으로 반복하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-30 18:23:17
원래의
915명이 탐색했습니다.

How to Efficiently Iterate Through Second-Level Nested JSON in Go?

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
로그인 후 복사

추가 고려 사항

  • 제공된 코드에서는 JSON 구조가 올바른 형식이며 잘못된 JSON 입력을 처리하지 않는다고 가정합니다.
  • 유형 반사(인터페이스{})를 사용하면 알려진 JSON에 대해 유형이 지정된 구조체를 사용하는 것에 비해 프로그램에 오버헤드가 추가될 수 있습니다.
  • 더 복잡한 JSON 구조나 성능 최적화를 위해서는 Go의 json.Decoder를 사용하고 JSON 계층 구조를 수동으로 탐색하는 것이 좋습니다.

위 내용은 Go에서 두 번째 수준 중첩 JSON을 효율적으로 반복하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿