共计 1914 个字符,预计需要花费 5 分钟才能阅读完成。
一、Gson 失常解析
个别状况下咱们应用 Gson 将 Json 字符串解析成 Java 实体数据类时,Json 字段和 Java 字段是一一对应且名称完全一致。比方如下 Json 字符串:
{
"userId":3,
"userName":"张三"
}
对应的 Java 实体类为:
// 只能解析 userId、userName
public final class UserInfo {
public int userId;
public String userName;
}
二、将 Json 字段映射到不同名的 Java 字段上
如上的 Java 实体类,如果此时后盾返回的 Json 字符串字段发生变化:
{
"USER_ID":4,
"USER_NAME":"李四"
}
对应的前台也要批改 Java 实体类字段,随之而来的就是要批改 View 层的数据绑定了 [大哭],为了防止一大推的批改,其实能够采纳将 Json 字段映射到不同名的 Java 字段上,给实体类的字段加上 @SerializedName 注解:
// 只能解析 USER_ID、USER_NAME
public final class UserInfo {@SerializedName("USER_ID")
public int userId;
@SerializedName("USER_NAME")
public String userName;
}
然而留神,此时该实体类只能解析 USER_ID、USER_NAME 字段,不能再解析 userId、userName 字段了。
三、将多个 Json 字段映射到单个 Java 字段
如上所述,如果咱们在不扭转实体类字段的状况下,既想解析 USER_ID、USER_NAME 字段,还需解析 userId、userName 字段。此时则需批改实体类的字段注解,在 @SerializedName 注解中应用值和备用参数:
// 能够解析 userId、userName;USER_ID、USER_NAME
public final class UserInfo {@SerializedName(value = "userId", alternate = "USER_ID")
public int userId;
@SerializedName(value = "userName", alternate = "USER_NAME")
public String userName;
}
此时的实例类就既可解析 USER_ID、USER_NAME 字段,也可解析 userId、userName 字段了。
更近一步:
再来如下的 Json 字符串:
{
"ID":5,
"NAME":"王五"
}
如果还想采纳原实体类进行解析,则需将 @SerializedName 注解中的备用参数批改为字符串数组,如下:
// 能够解析 userId、userName;USER_ID、USER_NAME;ID、NAME
public final class UserInfo {@SerializedName(value = "userId", alternate = {"USER_ID", "ID"})
public int userId;
@SerializedName(value = "userName", alternate = {"USER_NAME", "NAME"})
public String userName;
}
此时的实例类就能够解析 userId、userName;USER_ID、USER_NAME;ID、NAME 了。
四、总结:
应用如下带有 @SerializedName 注解,注解中应用了值和备用参数,且备用参数为字符串数组 的实体类:
// 能够解析 userId、userName;USER_ID、USER_NAME;ID、NAME
public final class UserInfo {@SerializedName(value = "userId", alternate = {"USER_ID", "ID"})
public int userId;
@SerializedName(value = "userName", alternate = {"USER_NAME", "NAME"})
public String userName;
}
能够同时解析如下三种字段的 Json:
String json1 = "{\"userId\":3,\"userName\":\" 张三 \"}";
String json2 = "{\"USER_ID\":4,\"USER_NAME\":\" 李四 \"}";
String json3 = "{\"ID\":5,\"NAME\":\" 王五 \"}";
格式化 Json 如下:
{
"userId":3,
"userName":"张三"
}
{
"USER_ID":4,
"USER_NAME":"李四"
}
{
"ID":5,
"NAME":"王五"
}