网络解析框架-Gson使用方法总结

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 注解从名字上就可以看出是暴露的意思,所以该注解是用于对外暴露字段的。该注解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值