Dave Cheney, ein renommierter Experte für Go, betont die Anforderung für Nachverfolgung in zusammengesetzten Liter -Deklarationen. Diese Regel scheint jedoch mit JSON Parsing zu stehen. Geben Sie JsonObject Struct {ein Objekte [] ObjectType `JSON:" Objekte "` } Type ObjectType struct { Name Zeichenfolge `JSON:" Name "` } func main () { Bytes: = [] byte (`{" Objekte ": [ {"Name": "foo"}, // Entfernen Sie das Komma, damit der Code funktioniert! ]} `) JSONTYPE: = & JSONObject {} JSON.unmarshal (Bytes & JSONTYPE) fmt.printf ("Ergebnisse: %v \ n", jsonType.objects [0] .Name) // Panik: Laufzeitfehler: Index außerhalb des Bereichs }
das nachfolgende Komma entfernen den Laufzeitfehler. Unterstützt es eine Lösung für diese Inkonsistenz?
// 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
}
Leider gibt es keine Lösung. Die JSON -Spezifikation erlaubt keine nachfolgenden Kommas. Während Go -Syntax -Mandate nach dem Nachverfolgung von Kommas in zusammengesetzten Literalen gilt, gilt diese Anforderung nicht für JSON -Parsen.
[
{"Name": "foo"},
]} Trotz des Potenzials eines bestimmten JSON -Parsers, das nachfolgende Komma zu ignorieren, sollte diese Praxis vermieden werden, da es bei der Verwendung anderer gültiger JSON -Parsers zu Fehlern führen kann.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3