Dave Cheney, un expert renommé de Go, souligne l'exigence de virgules de fin dans les déclarations littérales composites. Cependant, cette règle semble entrer en conflit avec l'analyse JSON.
Considérez le code suivant :
<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>
La suppression de la virgule de fin résout l'erreur d'exécution. Go prend-il en charge un correctif pour cette incohérence ?
Malheureusement, il n'y a pas de solution. La spécification JSON n'autorise pas les virgules finales. Bien que la syntaxe Go impose des virgules de fin dans les littéraux composites, cette exigence ne s'applique pas à l'analyse JSON.
En d'autres termes, le JSON suivant n'est pas valide :
<code class="json">{ "objects": [ {"name": "foo"}, ]}</code>
Malgré la possibilité d'un Analyseur JSON pour ignorer la virgule de fin, cette pratique doit être évitée car elle peut provoquer des erreurs lors de l'utilisation d'autres analyseurs JSON valides.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!