Maison >développement back-end >Golang >Virgules de fin en JSON : pourquoi la syntaxe littérale composite de Go entre-t-elle en conflit avec l'analyse JSON ?

Virgules de fin en JSON : pourquoi la syntaxe littérale composite de Go entre-t-elle en conflit avec l'analyse JSON ?

DDD
DDDoriginal
2024-10-28 20:17:31398parcourir

  Trailing Commas in JSON: Why Does Go's Composite Literal Syntax Conflict with JSON Parsing?

Erreur de syntaxe de virgule de fin dans l'analyse JSON avec Go

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 ?

Solution

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn