Beim Unmarshaling von JSON-Daten ist es oft wünschenswert, verschachtelte Objekte als undurchsichtige Werte zu behandeln, anstatt sie in Go-Typen zu analysieren. Dies kann mithilfe des RawMessage-Typs erreicht werden, der vom Paket „encoding/json“ bereitgestellt wird.
Beachten Sie die folgende JSON- und Go-Struktur:
{ "id": 15, "foo": { "foo": 123, "bar": "baz" } }
type Bar struct { Id int64 Foo []byte }
Versuch Das Unmarshalieren dieses JSON in die Bar-Struktur führt zu Folgendem Fehler:
json: cannot unmarshal object into Go value of type []uint8
Um das verschachtelte Objekt als Zeichenfolge oder Byte-Slice beizubehalten, verwenden Sie den RawMessage-Typ:
type Bar struct { Id int64 Foo json.RawMessage }
Wie in der Dokumentation beschrieben , RawMessage ist ein rohcodiertes JSON-Objekt, das sowohl Marshaler als auch Unmarshaler implementiert Schnittstellen.
Hier ist ein funktionierendes Beispiel:
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) }
Ausgabe:
{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]}
[Spielplatz Link](https://play.golang.org/p/L2yJj2e72dS)
Das obige ist der detaillierte Inhalt vonWie behandelt man verschachtelte JSON-Objekte als Strings oder Bytes in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!