Gson: json Parser for github Star 18k, Java json Parser from Google

Harmonios Learning 2021-11-25 18:29:51
gson json parser github star

J'ai écrit les tests pour vous,Mettez - le sur GitHub Allez.,Si tu n'y crois pas,On peut vérifier.

 https://github.com/google/gson/blob/master/gson/src/test/java/com/google/gson/metrics/PerformanceTest.java

 04、Guide d'utilisation

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.

Gson:GitHub Étoile cible 18K De JSON Analyseur,Google Produit par Java JSON Analyseur_Développement de l'arrière - plan

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 .

Gson:GitHub Étoile cible 18K De JSON Analyseur,Google Produit par Java JSON Analyseur_Interview_02

fromJson() Lors de la désérialisation, Comme ça .

Gson:GitHub Étoile cible 18K De JSON Analyseur,Google Produit par Java JSON Analyseur_Développement de l'arrière - plan_03

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 !

 05、 Type de mélange de traitement

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 .

 06、Personnalisation

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”

}

Enfin

Notes d'étude de l'architecte ultime:Distribué+Microservices+Cadre Open Source+Optimisation des performances

Gson:GitHub Étoile cible 18K De JSON Analyseur,Google Produit par Java JSON Analyseur_Interview_04

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

版权声明
本文为[Harmonios Learning]所创,转载请带上原文链接,感谢
https://javamana.com/2021/11/20211125182532028K.html

  1. Java经典面试题详解,突围金九银十面试季(附详细答案,mysql集群架构部署方案
  2. java整理,java高级特性编程及实战第一章
  3. java教程——反射,mongodb下载教程
  4. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day12,zookeeper原理作用
  5. Java后端互联网500道中高级面试题(含答案),linux钩子技术
  6. java8 Stream API及常用方法,java初级程序员面试
  7. java-集合-Map(双列)——迪迦重制版,2021Java开发社招面试解答之性能优化
  8. Flink处理函数实战之二:ProcessFunction类,java线程面试题目
  9. flex 布局详解,【Java面试题
  10. Linux basic command learning
  11. Why did docker lose to kubernetes? Docker employee readme!
  12. MySQL安装
  13. Elastic Search Aggregate Learning five: Problem Analysis of Uncertainty of sequencing results, Alibaba Java Performance Tuning Practical
  14. Installing, configuring, starting and accessing rabbitmq under Linux
  15. Oracle SQL injection summary
  16. Installation MySQL
  17. L'exposition à la photo d'essai sur la route i7 du nouveau vaisseau amiral de BMW Pure Electric a également été comparée à celle de Xiaopeng p7.
  18. spring JTA 关于异常处理的时机问题
  19. Le problème du temps de traitement des exceptions dans la JTA printanière
  20. Flink Handling Function Real War II: processfunction class, Java thread interview subject
  21. Oracle SQL injection summary
  22. [Java data structure] you must master the classic example of linked list interview (with super detailed illustration and code)
  23. Do you really know MySQL order by
  24. Record a java reference passing problem
  25. spring JTA 關於异常處理的時機問題
  26. Java - Set - Map (double file) - dija Rewriting, 2021 Java Developer's Performance Optimization
  27. Android入门教程 | OkHttp + Retrofit 取消请求的方法
  28. Java 8 Stream API and common methods, Java Junior Program interview
  29. Github 疯传!史上最强!BAT 大佬,2021年最新Java大厂面试笔试题分享
  30. git(3)Git 分支,zookeeper下载教程
  31. Java Backend Internet 500 questions d'entrevue moyennes et avancées (y compris les réponses), technologie de crochet Linux
  32. Entretien d'entretien d'usine Java post sprint de 100 jours - accumulation de jours et de mois, trois questions par jour [jour 12, fonction de principe de Zookeeper
  33. Tutoriel Java - reflection, tutoriel de téléchargement mongodb
  34. How to analyze several common key and hot issues in redis from multiple dimensions
  35. GIT (3) GIT Branch, Zookeeper Download tutoriel
  36. Tutoriel de démarrage Android | okhttp + Retrofit comment annuler une demande
  37. Design pattern [3.3] - Interpretation of cglib dynamic agent source code
  38. Share the actual operation of private collection project nodejs backend + Vue + Mysql to build a management system
  39. Springboot has 44 application initiators
  40. GitHub上霸榜久居不下的《Java面试突击宝典》,java图形用户界面设计基础
  41. GitHub上访问下载破百万的神仙文档《Java面试神技》看完我呆了,java面试问项目中遇到的问题
  42. GitHub上标星75k 超牛的《Java面试突击版,java高级工程师技能
  43. GitHub上标星2,java项目开发实训教程
  44. Docker development environment Preview
  45. JavaScript高級深入淺出:掌握 this 指向
  46. JavaScript Advanced Insight and outside: Mastering this direction
  47. Vue de l'application pratique de Javascript, drop drag Event
  48. docker 安装部署 Jenkins 2.322
  49. kafka安装
  50. 近九万字图文详解RabbitMQ
  51. Engaged in Java for one and a half years, how to break through yourself
  52. 输出9*9乘法表----java
  53. 判断一个数是不是素数-------java
  54. java项目,记录页面修改值,内部打“官司”用
  55. Docker installation Deployment Jenkins 2.322
  56. Comment porter un pantalon en hiver? Les petits hommes, les jambes épaisses et la largeur de l'entrejambe peuvent être vus. 3 techniques pour éviter la foudre
  57. MySQL下载和安装教程
  58. In depth analysis of rocketmq source code - message storage module
  59. Spring transaction management
  60. mysql恢复ibd数据,为何频频报错?