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