임의의 키/값 쌍을 사용하여 JSON을 Go 구조체로 역정렬화하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-10-30 06:45:28
원래의
981명이 탐색했습니다.

How Can I Unmarshal JSON with Arbitrary Key/Value Pairs into a Go Struct?

임의의 키/값 쌍을 사용하여 구조체로 JSON 역마샬링

문제 설명

목표는 알려진 문자열이 혼합된 JSON 문자열을 역마샬링하는 것입니다. 알 수 없는 키/값 쌍을 Go 구조체로 변환합니다. 알려진 필드는 특정 구조체 필드로 마샬링 해제되어야 하며, 알 수 없는 필드는 구조체 내의 키/값 쌍 모음으로 저장되어야 합니다.

해결책

이를 달성하기 위해 구조체는 다음을 수행할 수 있습니다. 알려진 필드와 맵 조각의 조합으로 정의:

<code class="go">type Message struct {
    Known1 string `json:"known1"`
    Known2 string `json:"known2"`
    Unknowns []map[string]interface{}
}</code>
로그인 후 복사

역마샬링 프로세스

이 JSON 문자열:

<code class="json">{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}</code>
로그인 후 복사

다음을 사용하여 역마샬링할 수 있습니다. 단계:

  1. Message 구조체의 인스턴스를 생성합니다.
  2. JSON 문자열을 구조체로 역마샬링합니다.
  3. 비마샬링 후 원시 JSON 객체를 반복하고 추출합니다. 알 수 없는 필드의 키와 값.
  4. 알 수 없는 각 키/값 쌍을 새 맵에 저장하고 이를 구조체의 Unknowns 필드에 추가합니다.

대체 솔루션

또는 구조체를 사용하는 대신 JSON을 map[string]인터페이스{}로 직접 역마샬링할 수 있습니다. 그러면 모든 키/값 쌍에 대한 액세스가 동적 컬렉션으로 제공됩니다.

<code class="go">var msg map[string]interface{}
json.Unmarshal([]byte(jsonMsg), &msg)</code>
로그인 후 복사

결론

구조체와 맵 중 하나를 선택하는 것은 애플리케이션의 특정 요구 사항에 따라 다릅니다. 미리 정의된 알려진 필드와 구조화된 접근 방식이 필요한 경우 구조체가 적합합니다. 알려지지 않은 필드의 정확한 특성을 사전에 알 수 없거나 보다 유연한 동적 데이터 구조가 필요한 경우 지도가 적합한 옵션입니다.

위 내용은 임의의 키/값 쌍을 사용하여 JSON을 Go 구조체로 역정렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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