GSON (github: https://github.com/google/gson) est une bibliothèque de classe Java fournie par Google pour la cartographie entre les objets Java et les données JSON. Vous pouvez convertir une chaîne JSON en un objet Java, ou vice versa.
Les objets les plus importants de GSON sont 2 Gson et GsonBuilders.
GSON a 2 méthodes les plus élémentaires (1) TOJSON () pour convertir les objets Java en JSON
(2) Fromjson () convertit JSON en objet Java
Écrire des cours d'entité:
classe publique People {String Name; en âge; booléen setName; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public int getage () {return âge; } public void Setage (int Age) {this.age = age; } public boolean getSetName () {return setName; } public void setSetName (boolean setName) {this.setName = setName; } @Override public String toString () {return "name =" + name + "age =" + age + "setName =" + setName; }}Écrivez la classe de test GSontest
import com.google.gson.exclusionsstrategy; import com.google.gson.fieldattributes; import com.google.gson.gson; import com.google.gson.gsonbuilder; / ** * convertir l'objet java en json. * / public class gSonTest {public static void main (String [] args) {People p = new People (); P.Setage (20); P.SetName ("People"); P.SetSetName (true); Gson gson = new gson (); System.out.println (gson.tojson (p)); }}Résultat de sortie:
{"Name": "People", "Age": 20, "setName": true}C'est juste le moyen le plus simple d'utiliser GSON. Comment l'implémenter si nous avons besoin de convertir le nom SetName d'attribut de BOOL Type à ne pas convertir lors de la convertissement en JSON?
Après avoir cherché dans le package de GSON pendant longtemps, j'ai constaté qu'il y avait une interface sous le package com.google.gson: exclusionStrategy. Bien que je ne sache pas ce qu'il fait, sur la base du nom, on peut en déduire que cette interface est utilisée pour définir la stratégie d'exclusion pour la conversion GSON. J'ai donc vérifié cette interface sur le site officiel http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html et j'ai constaté que tant que cette interface est implémentée et que l'objet de la classe d'implémentation est rempli de GSON, lors de la convertissement en Json, GSON filtrera la classe ou les attaques spécifiées. Le code suivant est donc:
import com.google.gson.exclusionsstrategy; import com.google.gson.fieldattributes; import com.google.gson.gson; import com.google.gson.gsonbuilder; / ** * convertir l'objet Java en json, sauter des fichiers spécifiques. * / public class gSonTest {public static void main (String [] args) {People p = new People (); P.Setage (20); P.SetName ("People"); P.SetSetName (true); ExclusionStrategy Exclustrategy = new SetterExclusionsTrategy (); Gson gson1 = new gsonBuilder () .SetExclusionsStrategies (exclustrategy) .Create (); Gson gson2 = new gson (); String JSON1 = gson1.tojson (p); String JSON2 = gson2.tojson (p); System.out.println (JSON1); System.out.println (JSON2); People P1 = GSON1.Fromjson (JSON1, People.class); People P2 = GSON2.Fromjson (JSON2, People.class); System.out.println (P1); System.out.println (P2); } classe statique privée setterExclusionsStrategy implémente exclusionStrategy {public boolean sailskipclass (class <?> Clazz) {return false; } public boolean sildskipfield (fieldAttributes f) {return f.getName (). startSwith ("set"); }}}Il s'avère qu'il existe deux façons de créer des objets GSON: new gson () signifie créer un objet GSON en utilisant la configuration par défaut, et si vous êtes créé en utilisant la méthode gsonbuilder.create (), vous pouvez personnaliser certains paramètres, principalement pour rendre le GSON créé plus adapté à certaines situations spécifiques. Le premier code bleu dans l'exemple ci-dessus crée un objet GSON, qui a la configuration des propriétés de filtrage en commençant par le mot "set" (si vous devez filtrer un certain type, vous pouvez réécrire l'interface EmplasskipClass (classe <?> Clazz) de la création de l'ExclusionStrategy Interfacegy objet). Par conséquent, dans cet exemple, lors de la conversion de l'objet People en JSON, le nom d'attribut sera filtré. Puisqu'il n'y a pas d'attribut setName dans JSON1, lorsque la désérialisation de JSON1 dans les gens s'oppose, le nom de type booléen n'a aucune valeur, donc lors de l'impression, la valeur par défaut du type booléen est prise. Les résultats suivants ont donc été obtenus:
{"Name": "People", "Age": 20} {"Name": "People", "Age": 20, "setName": true} name = People Age = 20 setName = falsename = People Age = 20 setName = true =GSON soutient également l'utilisation des annotations. Dans le package com.google.gson.annotation, il y a plusieurs annotations exposées, sérializedName, depuis et jusqu'à. Ils ont chacun leurs propres fonctions. Ce qui suit est un exemple officiel pour introduire des annotations couramment utilisées:
Exposer:
Cette annotation agit sur l'attribut, indiquant que lors de la sérialisation et de la désérialisation, cet attribut sera exposé à l'objet GSON. Cette annotation n'est valide que lorsque l'objet GSON est créé à l'aide de la méthode GSONBuilder et que la méthode gsonbuilder.ExclusefieldswithoutExPoseAnnotation () est appelée, sinon elle n'est pas valide. Voici un exemple introduisant comment utiliser @expose annotation:
classe publique User {@Expose private String FirstName; @Expose (serialize = false) private String LastName; @Expose (serialalize = false, désérialize = false) String privé EmailAddress; Mot de passe de chaîne privé;}Si vous créez un objet GSON dans la nouvelle méthode GSON (), la méthode TOJSON () et la méthode FromJson () exploiteront ces 4 propriétés lors de la sérialisation et de la désérialisation. Cependant, si vous utilisez gson gson = new gsonBuilder (). ExcluseFields withoutExPoseAnNotation (). Create () Pour créer des objets GSON, les méthodes TOJSON () et fromjson () de GSON ne sont pas marquées par l'annotation @Expose. Cet objet GSON exclura également les champs LastName et EmailAddress, car l'attribut serialize annoté @Expose est défini sur FALSE. De même, GSON exclura le champ EmailAddress pendant la désérialisation car la désérialize est définie sur False.
Nom en série:
Cette annotation est utilisée sur l'attribut, indiquant que lorsque cet attribut est sérialisé en JSON, le nom doit être sérialisé dans la valeur spécifiée par l'attribut de valeur d'annotation.
Cette annotation remplacera toute FieldnamingPolicy, y compris la politique de dénomination par défaut. Voici un exemple introduisant comment @SerializedNname Annotation est utilisé:
classe publique SomeClassWithFields {@SerializedName ("Name") Private Final String SomeField; chaîne finale privée Someotherfield; public SomeClassWithFields (String A, String b) {this.somefield = a; this.someotherfield = b; }}Le code suivant montre les résultats de la sérialisation de la classe de test ci-dessus:
SomeClassWithFields ObjectToSerialize = new SomeClassWithFields ("A", "B"); GSON GSON = new GSON (); String JSONRepresentation = GSON.Tojson (ObjectToSerialize); System.out.println (JSONrepresentation);Le résultat de l'exécution est:
{"Name": "A", "Someotherfield": "B"}On peut voir que la propriété "Somefield" a été sérialisée en "nom".
Remarque: Le nom d'attribut spécifié dans la valeur de @SerializedName doit être un nom d'attribut JSON valide.