web-dev-qa-db-fra.com

Noms de clé JSON minuscule avec JSON Marshal dans Go

Je souhaite utiliser le "encoding/json" package pour regrouper une structure déclarée dans l’un des packages importés de mon application.

Par exemple.:

type T struct {
    Foo int
}

Comme il est importé, tous les champs disponibles (exportés) de la structure commencent par une lettre majuscule. Mais je souhaite avoir des noms de clés minuscules:

out, err := json.Marshal(&T{Foo: 42})

aura pour résultat

{"Foo": 42}

mais je souhaite obtenir

{"foo": 42}

Est-il possible de contourner le problème de manière simple?

150
ANisus

Consultez la documentation pour encoding/json.Marshal . Il discute de l’utilisation des balises struct field pour déterminer comment le fichier json généré est formaté.

Par exemple:

type T struct {
    FieldA int    `json:"field_a"`
    FieldB string `json:"field_b,omitempty"`
}

Cela générera JSON comme suit:

{
    "field_a": 1234,
    "field_b": "foobar"
}
236
jimt

Vous pouvez créer votre propre structure avec les clés que vous souhaitez exporter et leur attribuer les balises JSON appropriées pour les noms en minuscules. Ensuite, vous pouvez copier la structure souhaitée dans la votre avant de l’encoder au format JSON. Ou si vous ne voulez pas vous soucier de faire une structure locale, vous pouvez probablement faire un map[string]interface{} et encodez cela.

7
Lily Ballard