Commas de fin JSON : une énigme d'exécution dans Go
Le principe de Dave Cheney des virgules de fin dans les littéraux composites s'étend à l'analyse JSON. Cependant, lors de la manipulation de données JSON avec des virgules finales, les programmeurs Go astucieux rencontrent une erreur d'exécution. Cet article explore les raisons sous-jacentes de ce comportement.
Contrairement aux littéraux composites de Go, qui nécessitent des virgules de fin selon la règle du point-virgule, la syntaxe JSON interdit strictement les virgules de fin. Le code suivant illustre le problème :
<code class="go">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>
Ce code paniquera avec une « erreur d'exécution : index hors de portée » lors de la tentative d'accès au premier élément de la tranche Objets. La raison de cette erreur est que l'analyseur JSON s'attend à ce que le JSON soit bien formé et que la virgule de fin dans l'exemple ci-dessus le rend invalide.
Selon la spécification JSON, les virgules de fin ne sont pas autorisées dans JSON. des tableaux ou des cartes. Par conséquent, même si la syntaxe de Go le permet, les analyseurs JSON les interpréteront comme des erreurs. Ce comportement est essentiel pour maintenir l'interopérabilité et éviter les incohérences entre les différents analyseurs JSON.
En conclusion, lors de l'analyse de JSON avec des virgules finales dans Go, il est impératif de respecter la spécification JSON et de les supprimer. Tenter de forcer l'analyseur à accepter les virgules de fin n'est pas conseillé et peut entraîner des erreurs inattendues ou des problèmes de compatibilité.
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!