Heim  >  Artikel  >  Backend-Entwicklung  >  Nachgestellte Kommas in JSON: Warum kollidiert die zusammengesetzte Literalsyntax von Go mit der JSON-Analyse?

Nachgestellte Kommas in JSON: Warum kollidiert die zusammengesetzte Literalsyntax von Go mit der JSON-Analyse?

DDD
DDDOriginal
2024-10-28 20:17:31289Durchsuche

  Trailing Commas in JSON: Why Does Go's Composite Literal Syntax Conflict with JSON Parsing?

Syntaxfehler bei abschließendem Komma beim JSON-Parsen mit Go

Dave Cheney, ein renommierter Go-Experte, betont die Notwendigkeit von nachgestellten Kommas in zusammengesetzten wörtlichen Deklarationen. Diese Regel scheint jedoch im Widerspruch zur JSON-Analyse zu stehen.

Beachten Sie den folgenden Code:

<code class="go">// package, imports omitted for brevity

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>

Das Entfernen des abschließenden Kommas behebt den Laufzeitfehler. Unterstützt Go eine Lösung für diese Inkonsistenz?

Lösung

Leider gibt es keine Lösung. Die JSON-Spezifikation erlaubt keine abschließenden Kommas. Während die Go-Syntax nachgestellte Kommas in zusammengesetzten Literalen vorschreibt, gilt diese Anforderung nicht für die JSON-Analyse.

Mit anderen Worten, das folgende JSON ist ungültig:

<code class="json">{ "objects": 
    [ 
        {"name": "foo"},
]}</code>

Trotz des Potenzials für eine bestimmte Wenn der JSON-Parser das abschließende Komma ignoriert, sollte diese Vorgehensweise vermieden werden, da sie bei der Verwendung anderer gültiger JSON-Parser zu Fehlern führen kann.

Das obige ist der detaillierte Inhalt vonNachgestellte Kommas in JSON: Warum kollidiert die zusammengesetzte Literalsyntax von Go mit der JSON-Analyse?. 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