Json工具介绍
在 Java 语言中,常见的 Bean 转换为 Json 的 Jar 包有以下几类:
- fastjson-1.2.23.jar 【alibaba】【社区非常活跃】 地址:https://github.com/alibaba/fastjson
- gson-2.8.0.jar 【google】【社区非常活跃】 地址:https://github.com/google/gson
- jackson-core.jar 地址:http://jackson.codehaus.org
- json-lib-2.4 地址:http://www.mvnrepository.com/artifact/net.sf.json-lib/json-lib/2.4
我们的问题是:在使用以上工具的过程中,如何按照指定的字段顺序进行序列化?接下来以 fastjson 为例进行讲解。
解决方法
代码一:
public class User2 {
private String name;
private String age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
默认生成 Json 字符串如下:
{"age":"18","name":"json","sex":"女"}
代码二:
import com.alibaba.fastjson.annotation.JSONField;
public class User {
@JSONField(ordinal=1)
private String name;
@JSONField(ordinal=2)
private String age;
@JSONField(ordinal=3)
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
使用注解 @JSONField(ordinal=1)
字段排序设置,生成 Json 字符串如下:
{"name":"json","age":"18","sex":"女"}
其他工具大都具备类似的功能,以上仅供参考。
餐后甜点
代码三:
import com.alibaba.fastjson.annotation.JSONField;
public class User {
@JSONField(ordinal = 1)
private String name;
@JSONField(ordinal = 2, name = "nianling")
private String age;
@JSONField(ordinal = 3)
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
生成 Json 字符串如下:
{"name":"json","nianling":"18","sex":"女"}
对比代码二生成的字符串,我们发现 age 变为 nianling 了,为什么会是这样的?
回看代码:
片段一:
@JSONField(ordinal = 2)
private String age;
片段二:
@JSONField(ordinal = 2, name = “nianling”)
private String age;
原来是 name 的作用。