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