>백엔드 개발 >Golang >Go에서 일관성이 없는 JSON 필드(문자열 대 배열)를 어떻게 처리할 수 있나요?

Go에서 일관성이 없는 JSON 필드(문자열 대 배열)를 어떻게 처리할 수 있나요?

DDD
DDD원래의
2024-12-06 15:30:13214검색

How Can I Handle Inconsistent JSON Fields (Strings vs. Arrays) in Go?

일관되지 않은 필드로 JSON 역마샬링: 문자열 및 배열 처리

JSON 데이터를 Go 구조체로 역마샬링할 때 필드를 처리하기가 어려울 수 있습니다. 종류가 다양할 수 있는 것입니다. 예를 들어, 필드는 대부분의 경우 문자열일 수 있지만 경우에 따라 문자열 배열일 수도 있습니다. 이 문제를 해결하기 위해 우리는 Go의 강력한 JSON 구문 분석 기능을 활용하는 솔루션을 제시합니다.

json.RawMessage로 가변 필드 캡처

일관되지 않은 JSON 필드를 처리하는 열쇠 json.RawMessage를 사용하여 원시 데이터를 캡처하는 데 있습니다. 이 유형은 구문 분석되지 않은 JSON 값을 저장하는 바이트 조각입니다. 원시 데이터를 저장함으로써 나중에 특정 유형에 따라 구문 분석할 수 있는 유연성을 갖게 됩니다.

DisplayName 필드를 숨기고 디코딩 후 채우기

관련 데이터를 얻기 전에 디코더가 DisplayName 필드를 해석하려고 시도하지 않도록 JSON "-" 이름을 사용하여 숨깁니다. 이 이름은 초기 언마샬링 중에 필드를 무시하도록 디코더에 지시합니다. 최상위 JSON이 디코딩된 후 구문 분석된 원시 데이터를 기반으로 DisplayName 필드를 수동으로 채웁니다.

다양한 유형의 원시 데이터 처리

에 따라 원시 데이터가 문자열이든 문자열 배열이든 다음과 같이 진행합니다.

  • 원시 데이터가 다음과 같은 경우 문자열인 경우 이를 단일 문자열로 역마샬링하고 이를 DisplayName에 할당합니다.
  • 원시 데이터가 문자열 배열인 경우 이를 문자열 조각으로 역마샬링하고 문자열을 결합한 후 DisplayName에 저장합니다. 구분 기호.

다음을 위한 루프에 통합 MyListings

MyListings와 같은 항목 목록을 처리하려면 각 항목을 반복하고 위에서 설명한 것과 동일한 역마샬링 논리를 수행하면 됩니다. 이를 통해 각 항목에 대한 DisplayName 필드의 불일치를 처리할 수 있습니다.

사용자 정의 언마샬러로 논리 캡슐화

데이터 모델의 여러 필드가 불일치할 수 있는 경우 유형의 경우 json.Unmarshaler 인터페이스를 구현하는 사용자 정의 유형에 논리를 캡슐화하는 것이 도움이 될 수 있습니다. 이렇게 하면 프로세스가 단순화되고 중복이 줄어듭니다.

결론적으로 json.RawMessage를 사용하고 다양한 필드를 숨기면 일관되지 않은 필드가 있는 JSON 데이터를 효과적으로 역마샬링하여 필요한 모든 데이터가 올바르게 캡처되고 구문 분석되도록 할 수 있습니다. 제공된 예제와 플레이그라운드 링크는 실제로 솔루션을 보여줍니다.

위 내용은 Go에서 일관성이 없는 JSON 필드(문자열 대 배열)를 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.