Maison >développement back-end >Golang >Pourquoi mon code Go panique-t-il avec une erreur d'exécution lors de l'analyse d'un tableau JSON avec une virgule finale ?
Dave Cheney, un expert renommé de Go, souligne l'importance de terminer chaque ligne d'un littéral composite par une virgule. Cependant, cette règle semble être en contradiction avec l'analyse JSON dans Go.
Considérez le code suivant :
<code class="go">package main import ( "fmt" "encoding/json" ) 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>
Dans ce code, la suppression de la virgule de fin du tableau JSON le fait fonctionner. Cependant, n'y a-t-il pas un moyen d'éviter cette incohérence ?
Malheureusement non. La spécification JSON interdit les virgules finales. Il s'agit d'une syntaxe Go valide pour ajouter une virgule finale à une énumération ouverte qui continue sur une autre ligne. Cependant, cela ne s'applique pas à JSON.
Voici un exemple de structure JSON invalide :
{ "objects": [ {"name": "foo"}, ]}
Même s'il était possible de persuader un analyseur JSON spécifique d'accepter ce format, d'autres des analyseurs JSON valides signaleraient à juste titre une erreur. Par conséquent, il est recommandé de respecter la spécification JSON et d'éviter les virgules finales.
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!