Go에서 언마샬링할 때 다양한 JSON 값 유형을 처리하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-18 21:07:03
원래의
712명이 탐색했습니다.

How to Handle Varying JSON Value Types When Unmarshaling in Go?

Go에서 다양한 값 유형을 사용하여 JSON 역마샬링

Go에서 JSON 역마샬링에는 일반적으로 JSON 데이터를 해당 구조체에 매핑하는 작업이 포함됩니다. 그러나 데이터 구조가 다양하여 키 값을 객체 또는 문자열의 배열로 표시하면 문제가 발생합니다.

문제:
API가 일관되지 않은 데이터 구조를 제공하여 결과적으로 키에 대한 잠재적인 값 변형: 인라인 객체 또는 객체에 대한 참조(/obj1/is/at/this/path).

해결책:
이 가변성을 처리하려면 다음을 고려하십시오. 다음 기술:

1. 인터페이스 유형으로 비정렬화:
[]인터페이스{} 유형의 필드가 포함된 구조체로 JSON 데이터를 비정렬화합니다. 이렇게 하면 문자열(문자열로 디코딩됨)과 객체(map[string]interface{}로 디코딩됨)가 모두 배열에 저장될 수 있습니다.

코드 샘플:

type Data struct {
    MyKey []interface{} `json:"mykey"`
}
로그인 후 복사

2. 구별을 위한 유형 전환:
데이터가 정렬 해제되면 유형 스위치를 사용하여 문자열과 객체를 구별합니다.

코드 샘플:

for i, v := range data.MyKey {
    switch x := v.(type) {
    case string:
        fmt.Println("Got a string: ", x)
    case map[string]interface{}:
        fmt.Printf("Got an object: %#v\n", x)
    }
}
로그인 후 복사

추가 참고 사항:

  • 기본 map[string]인터페이스{} 구조에 액세스하여 필요에 따라 객체를 추가로 처리할 수 있습니다.
  • 이 접근 방식은 다음을 제공합니다. 하드 코딩이나 반영 없이 데이터 구조에 대한 향후 잠재적인 변경 사항을 유연하게 처리할 수 있습니다.

위 내용은 Go에서 언마샬링할 때 다양한 JSON 값 유형을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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