Dave Cheney, un expert renommé sur Go, souligne l'exigence de courtiser dans des déclarations littérales composites. Cependant, cette règle semble entrer en conflit avec JSON Analyse.
Considérez le code suivant:
// 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
}
La suppression de la virgule de fuite résout l'erreur d'exécution. GO prend en charge un correctif pour cette incohérence?
Malheureusement, il n'y a pas de solution. La spécification JSON ne permet pas de virages de traîne. Alors que GO Syntax oblige les virgules de fuite dans les littéraux composites, cette exigence ne s'applique pas à l'analyse JSON.
En d'autres termes, le JSON suivant est invalide:
{ "objects":
[
{"name": "foo"},
]}
Malgré le potentiel d'un analyseur JSON spécifique pour ignorer la virgule arrière, cette pratique doit être évitée car elle peut provoquer des erreurs lors de l'utilisation d'autres analyseurs JSON valides.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3