J'ai écrit les tests pour vous,Mettez - le sur GitHub Allez.,Si tu n'y crois pas,On peut vérifier.
Je ne me vante pas,C'est vrai.,Je vais bien quand même,La difficulté est presque nulle.Si tu n'y crois pas,Je peux essayer..
J'ai une petite amie,Elle s'appelle comme moi,Aussi appelé Gson
,Elle m'offre toutes mes fonctions principales.Vous pouvez passer par new Gson()
La façon simple et brutale de la créer,Vous pouvez aussi appeler un GsonBuilder Le patron de,Qu'il envoie une copie par la poste,C'est vrai.,Je ne mens pas..
Commençons par un exemple de sérialisation.
Gson gson = new Gson();
System.out.println(gson.toJson(18));
System.out.println(gson.toJson(“Silence.”));
System.out.println(gson.toJson(new Integer(18)));
int[] values = { 18,20 };
System.out.println(gson.toJson(values));
Avec l'aide de ma copine , Vous pouvez mettre les types de données de base int、Type de chaîne String、Type d'emballage Intege
《Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Notes d'apprentissage pour le développement de l'arrière - plan+La dernière vidéo d'architecture+Document d'information sur le code source du projet en direct》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 Partage open source du contenu complet
r、int Tableau, etc. comme paramètre ,Passer à toJson()
Méthodes, La méthode renvoie un JSON Chaîne de forme.
Regardez les résultats :
18
“Silence.”
18
[18,20]
Revenons à l'exemple de désrialisation .
Gson gson = new Gson();
int one = gson.fromJson(“1”, int.class);
Integer two = gson.fromJson(“2”, Integer.class);
Boolean false1 = gson.fromJson(“false”, Boolean.class);
String str = gson.fromJson(““Wang Er””, String.class);
String[] anotherStr = gson.fromJson(“[“Silence.”,“Wang Er”]”, String[].class);
System.out.println(one);
System.out.println(two);
System.out.println(false1);
System.out.println(str);
System.out.println(Arrays.toString(anotherStr));
toJson()
La méthode est utilisée pour sérialiser,Correspondant,fromJson()
Méthode utilisée pour désérialiser.Mais, Vous devez désarialiser ,Spécifier le type de paramètre,- Oui. int Toujours Integer,- Oui. Boolean Toujours String,Ou String Tableau.
Regardez les résultats :
1
2
false
Wang Er
[Silence., Wang Er]
Les exemples ci - dessus sont assez simples, Je ne peux pas encore montrer mon pouvoir .
En bas, Nous venons de définir une classe :
public class Writer {
private int age = 18;
private String name = “Wang Er”;
private transient int sex = 1;
}
Et puis, On va le sérialiser :
Writer writer = new Writer();
Gson gson = new Gson();
String json = gson.toJson(writer);
System.out.println(json);
L'utilisation est aussi simple qu'avant , Regardez les résultats :
{“age”:18,“name”:“Wang Er”}
Encore une fois, Les résultats peuvent être désérialisés :
Writer writer1 = gson.fromJson(json, Writer.class);
Voici quelques considérations, Je dois te rappeler .
1)Recommandé private
Modifier les champs.
2) Aucune annotation n'est nécessaire pour indiquer quels champs doivent être sérialisés , Quels champs n'ont pas besoin d'être sérialisés .Par défaut, Inclure tous les champs , Et les champs hérités de la classe mère .
3) Si un champ est transient
Mots clés modificateurs, Il ne participera pas à la sérialisation .
4) Si la valeur d'un champ est null, Il n'apparaît pas dans les résultats sérialisés .
5)JSON Les champs manquants seront définis par défaut après désrialisation , La valeur par défaut du type de données de référence est null, La valeur par défaut pour le type de nombre est 0, Booléen par défaut à false.
Et puis..., Regardez un exemple de collection sérialisée .
List<String> list =new ArrayList<>();
list.add(“Bien étudier.”);
list.add(“Jour après jour”);
String json = gson.toJson(list);
Les résultats sont les suivants:
[“Bien étudier.”,“Jour après jour”]
Lors de la désérialisation,C'est aussi simple.
List<String> listResult = gson.fromJson(json,List.class);
Les résultats sont les suivants:
[Bien étudier., Jour après jour]
Ma copine est une personne très attentive et attentionnée , Avant que vous appeliez toJson()
Lorsque la méthode est sérialisée , Elle va d'abord juger null, Empêcher le lancement NPE,Encore une fois. getClass()
Obtenir le type de paramètre,Puis la sérialisation.
public String toJson(Object src) {
if (src == null) {
return toJson(JsonNull.INSTANCE);
}
return toJson(src, src.getClass());
}
Mais? Pour les génériques ,getClass()
Le type paramétré est perdu .Voici un exemple:.
public class Foo<T> {
T value;
public void set(T value) {
this.value = value;
}
public T get() {
return value;
}
public static void main(String[] args) {
Gson gson = new Gson();
Foo<Bar> foo = new Foo<Bar>();
Bar bar = new Bar();
foo.set(bar);
String json = gson.toJson(foo);
}
}
class Bar{
private int age = 10;
private String name = “Turing”;
}
Si vous debug Quand,Entrée dans toJson()
L'intérieur de la méthode,On peut observer.
foo Le type réel de est Foo<Bar>
, Mais ma copine appelle foo.getClass()
Quand, Il n'y a que Foo, Ça veut dire qu'elle ne sait pas foo Type réel de.
La sérialisation s'est bien passée , Il n'y a rien à faire pour désérialiser .
Foo<Bar> foo1 = gson.fromJson(json, foo.getClass());
Bar bar1 = foo1.get();
Ce code s'est trompé en cours d'exécution .
Exception in thread “main” java.lang.ClassCastException: class com.google.gson.internal.LinkedTreeMap cannot be cast to class com.itwanger.gson.Bar (com.google.gson.internal.LinkedTreeMap and com.itwanger.gson.Bar are in unnamed module of loader ‘app’)
at com.itwanger.gson.Foo.main(Foo.java:36)
Par défaut, Les types de paramètres génériques sont convertis en LinkedTreeMap, Ce n'est évidemment pas ce que nous attendions Bar, La petite amie a exprimé sa frustration .
En tant que Google Le fils de, Mon sang coule “Aristocrate”Deux mots., Comment puis - je supporter la solitude de ma petite amie quand elle est impuissante .
Et donc,, J'ai implanté deux autres méthodes dans le corps de ma copine ,Avec Type Pour les paramètres de type:
toJson(Object src, Type typeOfSrc);
<T> T fromJson(String json, Type typeOfT);
Dans ce cas, Quand vous faites la sérialisation et la désrialisation des génériques , Vous pouvez spécifier le type paramétré du générique .
Type fooType = new TypeToken<Foo<Bar>>() {}.getType();
String json = gson.toJson(foo,fooType);
Foo<Bar> foo1 = gson.fromJson(json, fooType);
Bar bar1 = foo1.get();
debug Entrée toJson()
Si la méthode est vue à l'intérieur ,Vous pouvez voir foo Le vrai type de .
fromJson()
Lors de la désérialisation, Comme ça .
Dans ce cas,bar1 Pour passer à travers foo1.get()
On y est..
Regarde., Comme j'ai réfléchi , Ma copine ne peut pas s'empêcher de me vanter !
Tu sais,Java Le type de mélange n'est pas recommandé , C'est ce qui suit .
List list = new ArrayList();
list.add(“Silence King II”);
list.add(18);
list.add(new Event(“gson”, “google”));
Event Est défini comme suit::
class Event {
private String name;
private String source;
Event(String name, String source) {
this.name = name;
this.source = source;
}
}
Parce que list Aucun type spécifique n'a été spécifié , Il peut donc contenir différents types de données . C'est plus facile , Ma copine n'a aucun problème avec la sérialisation , Mais la désrialisation est beaucoup plus difficile .
Gson gson = new Gson();
String json = gson.toJson(list);
System.out.println(json);
Les résultats sont présentés ci - dessous:
[“Silence King II”,18,{“name”:“gson”,“source”:“google”}]
Lors de la désérialisation, J'ai juste besoin d'un peu de réflexion pour Event Objet.
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(json).getAsJsonArray();
String message = gson.fromJson(array.get(0), String.class);
int number = gson.fromJson(array.get(1), int.class);
Event event = gson.fromJson(array.get(2), Event.class);
Je l'admets.,JsonParser C'est mon ex . J'espère que tu ne m'as pas aspergé , Ce n'est pas comme si j'étais , C'est parce que certains de nos personnages ne sont pas très bien adaptés . Mais nous restons amis , Parce qu'aucun de nous n'a tort , C'est juste que le Code est plus standard , Peu de développeurs utilisent déjà des types hybrides .
Vu que tu es un homme à la mode , J'ai toujours été très exigeante envers moi - même , Essayez de répondre à tous vos besoins . Cette exigence de haut niveau , Que ma copine m'aime et me déteste .
L'amour, Mon attitude à la recherche de la perfection ;Je déteste ça., Parfois, elle n'est pas à la hauteur ,Ça n'aide pas..
Utiliser toJson()
Sérialisation Java Quand l'objet,Retour à JSON Pas d'espace dans la chaîne ,Très compact.. Si vous voulez imprimer quelque chose de plus beau JSON Format, Tu dois appeler quelqu'un qui s'appelle GsonBuilder Le patron de, Faites - le personnaliser , Et vous envoyer une copie par la poste ,Comme si j'étais là.Guide d'utilisation Comme mentionné dans .
public class Writer {
private int age = 18;
private String name = “Silence King II”;
public static void main(String[] args) {
Writer writer = new Writer();
Gson gson = new Gson();
String json = gson.toJson(writer);
System.out.println(json);
Gson gson1 = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson1.toJson(writer);
System.out.println(jsonOutput);
}
}
Pour comparer les résultats :
{“age”:18,“name”:“Silence King II”}
{
“age”: 18,
“name”: “Silence King II”
}
Notes d'étude de l'architecte ultime:Distribué+Microservices+Cadre Open Source+Optimisation des performances
Cet article a été publié par CODINGProjet Open Source:【Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Résumé de base notes d'étude+Dernière vidéo d'explication+Code source du projet opérationnel】Inclus