Golang kann JSON nicht analysieren

WBOY
Freigeben: 2023-05-15 11:22:07
Original
2167 Leute haben es durchsucht

Golang ist eine sehr praktische Programmiersprache. Ihr Hauptziel beim Design ist die Verbesserung der Lesbarkeit, Wartbarkeit und Zuverlässigkeit des Programms. Beim Schreiben von Golang-Programmen müssen wir häufig JSON als Standardformat für die Datenserialisierung und -kommunikation verwenden. Wenn Sie jedoch Golang zum Parsen von JSON verwenden, treten manchmal Probleme auf, z. B. dass JSON nicht analysiert werden kann. In diesem Artikel werden einige häufige JSON-Parsing-Fehler vorgestellt und einige Lösungen bereitgestellt.

  1. Leeres JSON-Objekt kann nicht analysiert werden

In Golang können wir die Funktion json.Unmarsha1l verwenden, um JSON-Daten in eine Struktur oder ein Segment in der Go-Sprache zu analysieren. Wenn wir jedoch versuchen, ein leeres JSON-Objekt zu analysieren, meldet die Go-Sprache einen Fehler:

json: cannot unmarshal object into Go struct field .Field of type string
Nach dem Login kopieren
Nach dem Login kopieren

Dies liegt daran, dass das leere JSON-Objekt keine Schlüssel-Wert-Paare hat, sodass der Parser es nicht in eine Go-Struktur analysieren kann. Die Lösung kann darin bestehen, die Strukturfelder mithilfe von Zeigern als optional zu markieren, sodass leere JSON-Objekte unterstützt werden können. Beispiel:

type MyStruct struct {
    Field *string
}

data := []byte(`{}`)
var s MyStruct
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s.Field) // output: <nil>
Nach dem Login kopieren
  1. Der Nullwert in JSON kann nicht analysiert werden

In JSON stellt Null einen leeren Wert dar und der entsprechende Typ in Golang ist Null. Wenn wir versuchen, den Nullwert in JSON zu analysieren, meldet die Go-Sprache einen Fehler:

json: cannot unmarshal null into Go struct field .Field of type string
Nach dem Login kopieren

Dies liegt daran, dass der Nullwert in JSON nicht in einen Nicht-Zeiger-Typ in der Go-Sprache konvertiert werden kann. Die Lösung besteht darin, Zeigertypen zum Deklarieren von Strukturfeldern zu verwenden:

type MyStruct struct {
    Field *string
}

data := []byte(`{"Field": null}`)
var s MyStruct
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s.Field) // output: <nil>
Nach dem Login kopieren
  1. Leere Arrays können in JSON nicht analysiert werden

In JSON stellt ein leeres Array ein Array ohne Elemente dar, und der entsprechende Typ in Golang ist []. Wenn wir versuchen, ein leeres Array in JSON zu analysieren, meldet die Go-Sprache einen Fehler:

json: cannot unmarshal array into Go struct field .Field of type []string
Nach dem Login kopieren

Dies liegt daran, dass ein leeres Array nicht in ein Slice vom Nicht-Zeiger-Typ konvertiert werden kann. Die Lösung besteht darin, Zeigertypen zum Deklarieren von Slices zu verwenden:

type MyStruct struct {
    Field *[]string
}

data := []byte(`{"Field": []}`)
var s MyStruct
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s.Field) // output: &[]
Nach dem Login kopieren
  1. Verschachtelte Objekte können in JSON nicht analysiert werden

In JSON können wir mehrere Objekte verschachteln. Beim Parsen verschachtelter Objekte meldet Golang jedoch einen Fehler:

json: cannot unmarshal object into Go struct field .Field of type string
Nach dem Login kopieren
Nach dem Login kopieren

Dies liegt daran, dass Golang verschachtelte Objekte nicht in Felder von Nicht-Strukturtypen konvertieren kann. Die Lösung besteht darin, Strukturtypen zum Parsen verschachtelter Objekte zu verwenden:

type Field struct {
    Name string
}
type MyStruct struct {
    Field Field
}

data := []byte(`{"Field": {"Name": "value"}}`)
var s MyStruct
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s.Field.Name) // output: "value"
Nach dem Login kopieren
  1. Nicht-ASCII-Zeichen können in JSON nicht analysiert werden

In JSON können wir den UTF-8-Zeichensatz verwenden, um jedes Zeichen zu codieren, einschließlich ASCII- und Nicht-ASCII-Zeichen . Beim Parsen von Nicht-ASCII-Zeichen in JSON meldet Golang jedoch einen Fehler:

json: invalid character 'ò' looking for beginning of value
Nach dem Login kopieren

Dies liegt daran, dass die Go-Sprache standardmäßig UTF-8-Kodierung verwendet und die Zeichen in den JSON-Daten möglicherweise nicht UTF-8-kodiert sind. Die Lösung besteht darin, andere Codierungsformate zum Parsen zu verwenden, beispielsweise die rohe Binärcodierung von JSON:

data := []byte{0x22, 0xC3, 0xB2, 0x22}
var s string
err := json.Unmarshal(data, &s)
if err != nil {
    log.Fatal(err)
}
fmt.Println(s) // output: "ò"
Nach dem Login kopieren

Beim Schreiben von Golang-Programmen müssen wir häufig das JSON-Datenformat verwenden, aber manchmal stoßen wir beim Parsen von JSON auf einige Probleme. Dieser Artikel beschreibt einige häufige JSON-Parsing-Fehler und bietet einige Problemumgehungen. Hoffentlich helfen Ihnen diese Tipps dabei, einige häufige Fehler beim Schreiben von Golang-Programmen zu vermeiden.

Das obige ist der detaillierte Inhalt vonGolang kann JSON nicht analysieren. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage