Gson
2018-9-5 20:32 - QG2017移动组 - 张艺隽
Gson是使用率非常高的Json解析框架,提供快捷的方法来实现Java实体类和Json字符串的转换。
- 来自官方的说明:
Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of.
There are a few open-source projects that can convert Java objects to JSON. However, most of them require that you place Java annotations in your classes; something that you can not do if you do not have access to the source-code. Most also do not fully support the use of Java Generics. Gson considers both of these as very important design goals.
0. 参考资料
1. 开始使用
导入依赖:
implementation 'com.google.code.gson:gson:2.8.5'
2. JavaBean转Json
使用toJson()方法生成Json字符串。
- Java:
String userData = new Gson().toJson(user);
- Kotlin:
val userData = Gson().toJson(user)
3. Json转JavaBean
使用fromJson()方法将Json字符串转化为Java实体类
- Java:
User user = new Gson().fromJson(userData,User.class);
- Kotlin:
val user = Gson().fromJson(userData,User::class.java)
4. @SerializedName 注解
在实际情况中,经常因为后台瞎写接口,导致代码与文档不符,这种问题常出现于大小写、下划线。例如:
realpath
realpath字段按照后台提供的接口文档编写,但后台实际代码却是使用了驼峰的realPath。这种情况下使用 @SerializedName重命名注解,将可能发生错误的字段进行重命名处理。如:
- Java
@SerializedName(value = "realpath", alternate = {
"realPath","RealPath", "real_path", "Realpath"})
private String realpath;
- Kotlin
@SerializedName(value = "realpath", alternate = {
"realPath","RealPath", "real_path", "Realpath"})
var realpath : String
在注解中用alternate属性,为realpath提供了几种可能的命名,包括
- 驼峰的realPath
- 单词大写的RealPath
- 首字母大写的Realpath
- js风格的real_path
一些需要注意的点:
- 重命名仅用于反序列化
- 使用alternate属性时不能省略value属性,value指定字段的默认名称。
- 当有多条字段同时符合重命名时,以(Json字符串中)最后一个出现的值为准。
{
"realpath": "C:\\a.txt",
"real_path": "E:\\b.jpg",
"realPath": "F:\\c.doc"
}
- Java
System.out.println(file.realpath); // F:\c.doc
- Kotlin
println(file.realpath)
5. @Expose注解
在实际情况中,有些实体类包含本地字段,这些字段无需加入json中,那么就可以用 @Expose 注解。
@Expose 注解从名字上就可以看出是暴露的意思,所以该注解是用于对外暴露字段的。该注解