JSON 응답을 처리할 때 특정 중첩 객체를 원시 문자열 또는 바이트 배열로 보존해야 할 수도 있습니다. Go 구조로 파싱합니다. 이 문제를 해결하기 위해 인코딩/json 패키지의 json.RawMessage 유형을 사용하는 솔루션을 살펴보겠습니다.
특정 시나리오에서 다음 JSON은
{ "id" : 15, "foo" : { "foo": 123, "bar": "baz" } }
정렬 해제되었습니다. int64 유형의 ID 필드와 []byte 유형의 Foo 필드가 있는 Go 구조로 변환됩니다. 발생한 오류 "json: can unmarshal object into Go value of type []uint8"은 역마샬링 프로세스가 foo 객체를 Go 값으로 구문 분석하려고 시도했음을 나타내며 이는 의도된 동작이 아닙니다.
json.RawMessage 유형은 이 문제에 대한 솔루션을 제공합니다. 문서에 명시되어 있듯이 JSON 디코딩을 지연하거나 JSON 인코딩을 미리 계산하는 데 사용할 수 있는 "원시 인코딩된 JSON 개체"입니다. json.RawMessage를 사용하면 Go 구조에서 foo 객체를 원시 바이트 배열로 효과적으로 보존할 수 있습니다.
import ( "encoding/json" "fmt" ) type Bar struct { ID int64 `json:"id"` Foo json.RawMessage `json:"foo"` } func main() { var jsonStr = []byte(`{ "id" : 15, "foo" : { "foo": 123, "bar": "baz" } }`) var bar Bar err := json.Unmarshal(jsonStr, &bar) if err != nil { panic(err) } fmt.Printf("%+v\n", bar) }
출력:
{Id:15 Foo:[123 32 34 102 111 111 34 58 32 49 50 51 44 32 34 98 97 114 34 58 32 34 98 97 122 34 32 125]}
json.RawMessage를 활용하면 다음을 수행할 수 있습니다. 이제 JSON을 foo 객체를 바이트 배열로 처리하는 Go 구조로 성공적으로 역마샬링했습니다.
위 내용은 Go에서 JSON 중첩 객체를 바이트 배열로 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!