[转]快速搞懂Gson的用法

原文地址:http://coladesign.cn/fast-understand-the-usage-of-gson/

谷歌gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。gson支持任意复杂Java对象包括没有源代码的对象。

其他的json解析库还有json-lib;Jackson;com.alibaba.fastjson

使用场景:

Java对象和json字符串的相互转换;日志输出。

 

Logger logger = Logger.getLogger(CommonAction.class);
 
gson g = newgson();
 
logger.info(“return:”+g.toJson(map));

 

 

用法举例:

1、基础用法toJson

toJason()方法将对象转换成Json字符串

 

gson gson = newgson();
 
List persons = newArrayList();
 
String str = gson.toJson(persons);

 

 

2、基础用法:fromJson()

gson提供了fromJson()方法来实现从Json字符串转化为到Java实体的方法。

比如json字符串为:[{“name”:”name0”,”age”:0}]

 

Person person = gson.fromJson(str, Person.class);

 

 

提供两个参数,分别是json字符串以及需要转换对象的类型。

3、避免Unicode转义

例如:
{"s":"\u003c"}
我只想简单的打印成这样
{"s":"<"}
解决方案:
我只需要 disable HTML escaping.
Gson gson = new GsonBuilder().disableHtmlEscaping().create();

4、排除某些字段

如果一个类A中含有字段field1,它的父类也含有字段field1,那么A对象toJson的时候,就会发生declares multiple JSON fields named field1
解决方案1:在类A中去掉字段filed1.
解决方案2:使用Json@Expose注解
AMessageText中需要打印的字段filed1加上注解@Expose 。那么父类中没有加注解的field1就会被排除掉。
Gson g = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

5、换属性名字

 

publicclassSomeClassWithFields {
   @SerializedName("name") privatefinalString someField;
   privatefinalString someOtherField;
 
   publicSomeClassWithFields(String a, String b) {
     this.someField = a;
     this.someOtherField = b;
   }
 }
SomeClassWithFields objectToSerialize = newSomeClassWithFields("a", "b");
 gson gson = newgson();
 String jsonRepresentation = gson.toJson(objectToSerialize);
 System.out.println(jsonRepresentation);
 
 ===== OUTPUT =====
 {"name":"a","someOtherField":"b"}

 

 

6、加版本号

 

publicclassUser {
  privateString firstName;
  privateString lastName;
  @Since(1.0) privateString emailAddress;
  @Since(1.0) privateString password;
  @Since(1.1) privateAddress address;
}

 

 

7、泛型的用法

 

 

HashMap<String, Book> booksMap = gson.fromJson(result, newTypeToken<HashMap>String, Book>() { }.
posted @   dirgo  阅读(350)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示