Heim > Backend-Entwicklung > Golang > Wie behandelt man verschachtelte JSON-Objekte als Strings oder Bytes in Go?

Wie behandelt man verschachtelte JSON-Objekte als Strings oder Bytes in Go?

Mary-Kate Olsen
Freigeben: 2024-11-29 07:15:11
Original
557 Leute haben es durchsucht

How to Handle Nested JSON Objects as Strings or Bytes in Go?

Marshaling verschachtelter JSON-Objekte als Strings oder Bytes

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.

Problem

Beachten Sie die folgende JSON- und Go-Struktur:

{
  "id": 15,
  "foo": { "foo": 123, "bar": "baz" }
}
Nach dem Login kopieren
type Bar struct {
  Id int64
  Foo []byte
}
Nach dem Login kopieren

Versuch Das Unmarshalieren dieses JSON in die Bar-Struktur führt zu Folgendem Fehler:

json: cannot unmarshal object into Go value of type []uint8
Nach dem Login kopieren

Lösung

Um das verschachtelte Objekt als Zeichenfolge oder Byte-Slice beizubehalten, verwenden Sie den RawMessage-Typ:

type Bar struct {
  Id int64
  Foo json.RawMessage
}
Nach dem Login kopieren

Wie in der Dokumentation beschrieben , RawMessage ist ein rohcodiertes JSON-Objekt, das sowohl Marshaler als auch Unmarshaler implementiert Schnittstellen.

Beispiel

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)
}
Nach dem Login kopieren

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]}
Nach dem Login kopieren

Spielplatz

[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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage