"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go JSON Unmarshalling에서 중첩 배열을 처리하는 방법은 무엇입니까?

Go JSON Unmarshalling에서 중첩 배열을 처리하는 방법은 무엇입니까?

2024-11-08에 게시됨
검색:124

How to Handle Nested Arrays in Go JSON Unmarshalling?

Golang JSON: 언마샬링으로 중첩 배열 처리

Go에서는 언마샬링 후 중첩 JSON 배열로 작업할 때 오류를 이해하는 것이 중요합니다. "유형 인터페이스 {}는 인덱싱을 지원하지 않습니다." 이 오류는 인터페이스{} 변수에 저장된 JSON 배열 내의 요소에 액세스하려고 할 때 발생합니다.

이 문제를 해결하려면 유형 어설션을 활용하여 인터페이스{} 변수를 기본 배열 유형.

인터페이스{} JSON 모듈의 표현

JSON 모듈은 배열을 []인터페이스{} 슬라이스로, 사전을 맵[문자열]인터페이스{로 나타냅니다. }는 인터페이스{} 변수로 디코딩할 때 매핑됩니다.

유형 어설션을 사용하여 중첩 요소에 액세스

오류 검사 없이 다음과 같이 유형 어설션을 사용하여 JSON 배열을 탐색할 수 있습니다. :

objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])

그러나 유형이 일치하지 않으면 이러한 유형 어설션이 패닉을 일으킬 수 있다는 점에 유의하는 것이 중요합니다. 이 문제를 방지하려면 2회 반환 형식을 사용하여 오류를 확인할 수 있습니다.

objects, ok := result["objects"].([]interface{})
if !ok {
    // Handle error here
}

접근성 향상을 위한 구조로 디코딩

JSON 데이터가 일관된 형식을 따르는 경우 더 효율적인 솔루션은 이를 구조화된 유형으로 디코딩하는 것입니다. 예를 들어, 제공된 데이터를 기반으로:

type Result struct {
    Query   string `json:"query"`
    Count   int    `json:"count"`
    Objects []struct {
        ItemId      string `json:"ITEM_ID"`
        ProdClassId string `json:"PROD_CLASS_ID"`
        Available   int    `json:"AVAILABLE"`
    } `json:"objects"`
}

이 구조로 디코딩하면 result.Objects[0].ItemId를 사용하여 항목 ID에 직접 액세스할 수 있습니다. 이 접근 방식을 사용하면 유형 어설션이 필요하지 않으며 중첩된 요소에 액세스하기 위한 유형이 안전한 방법을 제공합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3