Je souhaite utiliser le "encoding/json"
package pour marshaler 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é en minuscules:
out, err := json.Marshal(&T{Foo: 42})
aura pour résultat
{"Foo": 42}
mais je souhaite avoir
{"toto": 42}
Est-il possible de contourner le problème de manière simple?
json
go
marshalling
ANisus
la source
la source
Réponses:
Jetez un œil à la documentation pour encoder / json.Marshal . Il traite de l'utilisation des balises de champ struct pour déterminer comment le json généré est formaté.
Par exemple:
Cela générera JSON comme suit:
la source
reflect
package.json:"some_tag"
place dejson: "some_tag"
. J'ai été mordu par ça pendant un moment.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 vôtre avant de l'encoder en JSON. Ou si vous ne voulez pas vous soucier de créer une structure locale, vous pouvez probablement en créer un
map[string]interface{}
et l'encoder.la source
map[string]interface{}
fonctionnerait tant que je ne me retrouverai pas avec des objets / structures imbriqués