"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Les virgules de fuite dans JSON: Pourquoi la syntaxe littérale composite de Go \ est-elle en conflit avec JSON l'analyse?

Les virgules de fuite dans JSON: Pourquoi la syntaxe littérale composite de Go \ est-elle en conflit avec JSON l'analyse?

Publié le 2025-03-23
Parcourir:431

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

Erreur de syntaxe de virgule de la virgule en analyse JSON avec go

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?

Solution

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.

Dernier tutoriel Plus>

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