알 수 없는/임의의 키/값 쌍을 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!