언마샬링 후 Golang에서 중첩된 JSON 배열에 액세스하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-04 18:54:02
원래의
425명이 탐색했습니다.

How to Access Nested JSON Arrays in Golang After Unmarshalling?

정렬 해제 후 Golang에서 중첩된 JSON 배열에 액세스

Golang에서 JSON 응답으로 작업할 때 중첩된 JSON 요소에 액세스하는 데 어려움을 겪을 수 있습니다. 정렬. 이는 "객체" 배열 내의 특정 요소에 액세스하려고 할 때 발생할 수 있으며, "유형 인터페이스 {}는 인덱싱을 지원하지 않습니다."와 같은 오류가 발생합니다.

오류 원인

이 오류는 Go의 인터페이스 변수가 인덱싱을 지원하지 않기 때문에 발생합니다. JSON 페이로드를 인터페이스 변수로 디코딩하면 JSON 모듈은 배열을 []interface{} 슬라이스로 나타내고 사전을 map[string]interface{} 맵으로 나타냅니다.

해결책 1: 유형 어설션 사용

"객체" 배열 내의 특정 요소에 액세스하려면 유형 어설션을 사용하여 인터페이스 변수를 구체적인 유형으로 변환할 수 있습니다. 그러나 이 접근 방식에서는 유형 어설션이 실패한 경우를 처리하기 위해 오류 검사가 필요합니다.

<code class="go">objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])</code>
로그인 후 복사

해결책 2: 구조로 디코딩

JSON 페이로드에 알려진 형식의 경우 보다 강력한 솔루션은 이를 사용자 정의 구조로 직접 디코딩하는 것입니다. 이를 통해 예상 구조를 정의할 수 있으므로 유형 어설션 및 오류 처리가 필요하지 않습니다.

<code class="go">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"`
}

var result Result
if err := json.Unmarshal(payload, &result); err != nil {
    panic(err)
}
fmt.Println(result.Objects[0].ItemId)</code>
로그인 후 복사

특정 사용 사례에 따라 적절한 솔루션을 선택하면 이후 Golang의 중첩된 JSON 배열에 원활하게 액세스할 수 있습니다. 언마샬링 중입니다.

위 내용은 언마샬링 후 Golang에서 중첩된 JSON 배열에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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