>백엔드 개발 >Golang >Go에서 임의의 키/값 쌍을 사용하여 JSON을 구조체로 역정렬화하는 방법은 무엇입니까?

Go에서 임의의 키/값 쌍을 사용하여 JSON을 구조체로 역정렬화하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-26 16:35:30837검색

How to Unmarshal JSON with Arbitrary Key/Value Pairs into a Struct in Go?

임의의 키/값 쌍을 사용하여 JSON을 구조체로 역정렬화

알 수 없는/임의의 키/값 쌍을 사용하여 JSON을 구조체로 역정렬화하는 것과 관련하여 유사한 질문이 많이 제기되었습니다. 그러나 발견된 솔루션 중 어느 것도 이를 달성하기 위한 간단하고 우아한 방법을 제공하지 않았습니다.

문제 설명

알려진 필드(항상 존재)와 알 수 없는 수의 알 수 없는/ 임의의 필드. 예:

<code class="json">{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}</code>

이 예에서 Known1과 Known2는 알려진 필드이고, Unknown1과 Unknown2는 임의의 필드입니다. 알 수 없는 필드에는 어떤 이름(키)과 값(문자열, 부울, float64 또는 int)이 있을 수 있습니다.

우리의 목표는 이러한 JSON 메시지를 구조체로 구문 분석하는 관용적인 방법을 찾는 것입니다.

제안된 솔루션

다음 구조체를 정의할 수 있습니다.

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

이 구조체를 사용하면 샘플 JSON 메시지는 다음 결과를 산출해야 합니다.

{Known1:foo Known2:bar Unknowns:[map[unknown1:car] map[unknown2:1]]}

대체 솔루션

또 다른 옵션은 JSON을 map[string]인터페이스로 역마샬링하는 것입니다.{}:

<code class="go">import (
    "encoding/json"
    "fmt"
)

func main() {
    jsonMsg := `{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}`
    var msg map[string]interface{}
    fmt.Println(json.Unmarshal([]byte(jsonMsg), &msg))
    fmt.Printf("%+v", msg)
}</code>

이렇게 하면 다음이 생성됩니다.

<nil>
map[known1:foo known2:bar unknown1:car unknown2:1]

다음의 장점 이 접근 방식은 키와 값을 반복하고 데이터를 처리하는 데 필요한 유형 어설션을 수행할 수 있다는 것입니다. 필요에 따라 구조체에 데이터를 채울 수도 있고 채우지 않을 수도 있습니다.

위 내용은 Go에서 임의의 키/값 쌍을 사용하여 JSON을 구조체로 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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