Heim  >  Artikel  >  Backend-Entwicklung  >  Warum gerät mein Go-Code beim Parsen eines JSON-Arrays mit einem abschließenden Komma in Panik und es kommt zu einem Laufzeitfehler?

Warum gerät mein Go-Code beim Parsen eines JSON-Arrays mit einem abschließenden Komma in Panik und es kommt zu einem Laufzeitfehler?

DDD
DDDOriginal
2024-10-28 08:13:29886Durchsuche

Why Does My Go Code Panic with a Runtime Error When Parsing a JSON Array with a Trailing Comma?

Laufzeitfehler beim Parsen von JSON-Arrays mit nachgestellten Kommas in Go

Dave Cheney, ein renommierter Go-Experte, betont, wie wichtig es ist, jede Zeile eines zusammengesetzten Literals mit zu beenden ein Komma. Diese Regel scheint jedoch im Widerspruch zum JSON-Parsing in Go zu stehen.

Bedenken Sie den folgenden Code:

<code class="go">package main

import (
    "fmt"
    "encoding/json"
)

type jsonobject struct {
    Objects []ObjectType `json:"objects"`
}

type ObjectType struct {
    Name string `json:"name"`
}

func main() {
    bytes := []byte(`{ "objects": 
        [ 
            {"name": "foo"}, // REMOVE THE COMMA TO MAKE THE CODE WORK!
        ]}`)
    jsontype := &jsonobject{}
    json.Unmarshal(bytes, &jsontype)
    fmt.Printf("Results: %v\n", jsontype.Objects[0].Name) // panic: runtime error: index out of range
}</code>

In diesem Code funktioniert das Entfernen des abschließenden Kommas aus dem JSON-Array. Gibt es jedoch keine Möglichkeit, diese Inkonsistenz zu vermeiden?

Die Resolution

Leider nein. Die JSON-Spezifikation verbietet nachgestellte Kommas. Es ist eine gültige Go-Syntax, einer geöffneten Aufzählung, die in einer anderen Zeile fortgesetzt wird, ein abschließendes Komma hinzuzufügen. Dies gilt jedoch nicht für JSON.

Hier ist ein Beispiel für eine ungültige JSON-Struktur:

{ "objects": 
    [ 
        {"name": "foo"},
]}

Auch wenn es möglich wäre, einen bestimmten JSON-Parser davon zu überzeugen, dieses Format zu akzeptieren, andere Gültige JSON-Parser würden zu Recht einen Fehler melden. Daher wird empfohlen, sich an die JSON-Spezifikation zu halten und nachgestellte Kommas zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum gerät mein Go-Code beim Parsen eines JSON-Arrays mit einem abschließenden Komma in Panik und es kommt zu einem Laufzeitfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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