人生苦短,我用Gson

本文详细介绍了谷歌的Gson库,包括JSON的简介,Gson的基本使用,注解特性以及高阶用法。Gson提供fromJson和toJson方法进行序列化和反序列化,支持普通对象、Map与Json的转换。文章还讨论了如何处理特殊字符、NULL值,以及解决数字类型转换精度问题的策略。
摘要由CSDN通过智能技术生成

Life is short, you need Gson

 

一、JSON简介

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 键值对是用来保存JS对象的一种方式,和JS对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值,如下例子所示:

{“firstName”: “John”}

二、谷歌Gson

解析和生成json的方式很多,java的有Jackson、Gson、FastJson等,Gson是谷歌提供的一款开源解析和生成json的库。

1、Gson实例化方法

Gson gson = new Gson();
Gson gson = new GsonBuilder().create();

第二种初始化方法,可以选择更多的序列化与反序列化方式,下面会详细介绍。

2、Gson基本用法

gson主要提供了fromJson和toJson两个方法,fromJson用于反序列化,toJson用于把json序列化为Json字符串。

 
  1. public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException {
  2.  
  3. }
  4. public String toJson(Object src) {
  5.  
  6. }

fromJson()第二个入参是反序列化成的对象类型

3、简单对象与Json的转换

 
  1. class Person{
  2. private String name;
  3. private int age;
  4.  
  5. public Person(String name, int age) {
  6. this.name = name;
  7. this.age = age;
  8. }
  9.  
  10. @Override
  11. public String toString() {
  12. return "Person{" +
  13. "name='" + name + '\'' +
  14. ", age=" + age +
  15. '}';
  16. }
  17. }
  18.  
  19.  
  20. public static void main(String[] args) {
  21. Person person = new Person("steven", 18);
  22. Gson gson = new Gson();
  23. String json = gson.toJson(person);
  24. System.out.println(json);
  25. String personJson = "{\"name\":\"steven\",\"age\":18}";
  26. Person person1 = gson.fromJson(personJson, Person.class);
  27. System.out.println(person1);
  28. }
  29. 输出--》
  30. { "name":"steven","age":18}
  31. Person{ name='steven', age=18}

可以看出Gson的强悍之处,普通的类库序列化和反序列时必须要求所对应的类中属性必须含有setter和getter方法,Gson完全不需要。

4、Map和Json的转换

 
  1. public static void main(String[] args) {
  2. Person person = new Person("steven", 18);
  3. Map<String, Person> personMap = new HashMap<>();
  4. personMap.put("person", person);
  5. Gson gson = new Gson();
  6. String json = gson.toJson(personMap);
  7. System.out.println(json);
  8. String personJson = "{\"person\":{\"name\":\"steven\",\"age\":18} }";
  9. Map map = gson.fromJson(personJson, Map.class);
  10. System.out.println(map);
  11. }
  12. 输出--》
  13. { "person":{ "name":"steven","age":18} }
  14. { person={ name=steven, age=18.0} }

此处可以看出通过gson可以近乎完美的转换map和json,可以看出有个有小问题fromJson时,数字类型的value转换时会转成double类型,会把18转成18.0,下文会有解决方案。

三、Gson注解

1、序列化名注解@SerializedName

 
  1. @SerializedName("personName")
  2. private String name;
  3.  
  4. public static void main(String[] args) {
  5. Person person = new Person("steven", 18);
  6. Gson gson = new Gson();
  7. String json =
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值