JSON 데이터를 역마샬링할 때 중첩된 개체를 Go 유형으로 구문 분석하는 대신 불투명한 값으로 처리하는 것이 바람직한 경우가 많습니다. 이는 인코딩/json 패키지에서 제공하는 RawMessage 유형을 사용하여 달성할 수 있습니다.
다음 JSON 및 Go 구조체를 고려하세요.
{ "id": 15, "foo": { "foo": 123, "bar": "baz" } }
type Bar struct { Id int64 Foo []byte }
시도 이 JSON을 Bar 구조체로 역마샬링하면 다음과 같은 결과가 발생합니다. 오류:
json: cannot unmarshal object into Go value of type []uint8
중첩된 객체를 문자열이나 바이트 조각으로 유지하려면 RawMessage 유형을 사용하세요.
type Bar struct { Id int64 Foo json.RawMessage }
문서에 설명된 대로 , RawMessage는 Marshaler와 Unmarshaler를 모두 구현하는 원시 인코딩된 JSON 개체입니다. 인터페이스.
다음은 실제 예입니다:
package main import ( "encoding/json" "fmt" ) var jsonStr = []byte(`{ "id": 15, "foo": { "foo": 123, "bar": "baz" } }`) type Bar struct { Id int64 Foo json.RawMessage } func main() { var bar Bar if err := json.Unmarshal(jsonStr, &bar); err != nil { panic(err) } fmt.Printf("%+v", 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]}
[Playground 링크](https://play.golang.org/p/L2yJj2e72dS)
위 내용은 Go에서 중첩된 JSON 개체를 문자열이나 바이트로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!