Convertir en JSON propriétés de style des noms de Java CamelCase noms avec GSON
Je suis en utilisant GSON pour convertir les données JSON j'arrive à un objet Java. Cela fonctionne assez bien dans tous mes tests.
Le problème est que notre réalité, les objets ont des propriétés nommé comme is_online. GSON seules les cartes si elles sont nommées totalement égal, il serait agréable d'avoir GSON convertir les noms de Java chameau cas isOnline.
Il semble que ce soit possible lors de la création des données JSON, à dos de chameau cas est converti, afin de souligner les mots séparés en JSON. Mais je ne peux pas trouver un moyen de spécifier cela dans l'autre sens round.
- J'avais proposer d'accepter une réponse
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé le paramètre suivant fonctionne parfaitement lors de la lecture de json avec a souligné attributs et à l'aide de camelcasing dans mes modèles.
Vous pouvez utiliser le
SerializedName
annotation:Remarque: Lorsque vous avez défini un
FieldNamingPolicy
déjà,SerializedName
va écraser ses paramètres pour ce domaine spécifique (ce qui est très pratique pour les cas particuliers).Garder à l'esprit que votre exemple est un cas limite. Si vous avez une propriété 'foo' ses de lecture devrait être nommé "getFoo", et si vous avez une propriété nommée "foo_bar' ses de lecture devrait être nommé "getFooBar', cependant, dans votre exemple, vous mappez un booléen et les booléens ont cas particulier des conventions de nommage en java. Une primitive de propriété booléenne nommée en ligne devrait avoir un getter nommé "isOnline", PAS "getOnline" ou pire encore, 'getIsOnline'. Un booléen objet wrapper (c'est à dire Boolean) ne devrait pas suivre ce cas spécial, et une propriété nommée "en ligne" devrait avoir un getter nommé "getOnline'.
Donc, ayant les propriétés booléennes avec " est " dans le nom est un cas limite, où vous aurez envie de supprimer ce préfixe particulier au cours de votre conversion. Dans le sens inverse, votre code peut inspecter l'objet json pour les deux brutes au nom de la propriété ainsi que d'un 'is_XXX' version.
Je pense que ce que vous voulez est ici. À l'aide d'annotations, vous pouvez dire GSON que le mySuperCoolField est en fait appelé this_field_is_fun dans le JSON et il va décompresser correctement. Au moins, je pense qu'il travaille pour la désérialisation trop.
Si cela ne fonctionne pas, vous pouvez utiliser des JsonSerializer/JsonDeserializers, qui travaillent beaucoup, mais vous devez les mettre à jour pour les changements dans votre classe (comme lorsque vous ajoutez un champ). Vous perdez de l'auto-magique.
La meilleure chose à faire (ce qui serait moche, mais très propre et simple, si la première suggestion ne fonctionne pas) serait tout simplement le nom du champ dans une façon de faire de GSON heureux, et ajouter des méthodes d'accès avec les noms que vous voulez, par exemple,