다양한 JSON 형식을 처리하기 위해 Unmarshal 조정
개발자는 외부 API에 액세스할 때 종종 다양한 JSON 응답 형식을 접하게 되며 데이터를 일관된 구조. Go에서는 몇 가지 기술을 사용하여 이러한 차이점을 우아하게 처리할 수 있습니다.
문자열 "메시지" 또는 오류 코드 배열의 두 가지 형식으로 JSON 메시지를 반환하는 API 엔드포인트의 예를 들어보세요. "ERROR_CODE"]. 이러한 변형을 관리하려면 응답을 보관하도록 사용자 정의 구조체를 정의할 수 있습니다.
<code class="go">type Response struct { Message interface{} `json:"message"` }</code>
메시지 필드를 인터페이스 유형으로 설정하면 Go의 동적 타이핑 시스템을 통해 다양한 데이터 유형을 저장할 수 있습니다. 이러한 유연성은 다양한 응답 형식을 처리하기 위한 출발점을 제공합니다.
JSON을 응답 구조체로 역마샬링하려면 json.Unmarshal에 대한 호출이 활용됩니다. 그러나 메시지 필드는 다양한 유형을 보유할 수 있으므로 JSON이 배열(오류 응답)을 나타내는 경우 특별한 경우가 발생합니다. 기본적으로 JSON 배열은 []인터페이스{} 유형의 값으로 역마샬링됩니다.
이 구별을 처리하는 핵심은 마샬링되지 않은 메시지 필드의 유형을 검사하는 데 있습니다. 이는 아래 예시와 같이 유형 어설션 또는 유형 스위치를 사용하여 달성할 수 있습니다.
<code class="go"> switch x := r.Message.(type) { case string: fmt.Println("Success, message:", x) case []interface{}: fmt.Println("Error, code:", x) default: fmt.Println("Something else:", x) }</code>
이 스니펫에서는 r.Message 유형을 검사합니다. 문자열인 경우 성공 메시지를 나타냅니다. 인터페이스 조각인 경우 오류 코드와 함께 오류 응답을 나타냅니다. 그렇지 않으면 예상치 못한 응답으로 간주됩니다.
이 기술을 활용하면 개발자는 다양한 형식의 JSON 응답을 통합 구조체로 효율적으로 역마샬링하여 메시지 유형에 따라 후속 처리 및 의사 결정을 내릴 수 있습니다.
위 내용은 Go에서 언마샬링할 때 다양한 JSON 형식을 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!