maven:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>x.x.x</version>
</dependency>
java對(duì)象轉(zhuǎn)json格式字符串:
JSON.toJSONString(Object o)
可以自定義輸出筋夏,控制字段順序骗随,日期格式,是否序列化等涨椒,例如:
@JSONField(name="AGE", serialize=false)
private int age;
@JSONField(name="LAST NAME", ordinal = 2)
private String lastName;
@JSONField(name="FIRST NAME", ordinal = 1)
private String firstName;
@JSONField(name="DATE OF BIRTH", format="dd/MM/yyyy", ordinal = 3)
private Date dateOfBirth;
@JSONField 可作用于對(duì)象的字段 或者Getter是辕,Setter
注意:FastJson 在進(jìn)行操作時(shí),是根據(jù) getter 和 setter 的方法進(jìn)行的疙教,并不是依據(jù) Field 進(jìn)行。
注意:若屬性是私有的犀暑,必須有 set 方法。否則無法反序列化广辰。
JSON 字符串轉(zhuǎn)換為 Java 對(duì)象:
JSON.parseObject(jsonStr, ObjectName.class);
注意反序列化時(shí)為對(duì)象時(shí),必須要有默認(rèn)無參的構(gòu)造函數(shù),否則會(huì)報(bào)異常
使用 ContextValueFilter 配置 JSON 轉(zhuǎn)換
在某些場(chǎng)景下所森,對(duì)Value做過濾,需要獲得所屬JavaBean的信息掩幢,包括類型顺献、字段能曾、方法等:
@Test
public void givenContextFilter_whenJavaObject_thanJsonCorrect() {
ContextValueFilter valueFilter = new ContextValueFilter () {
public Object process(
BeanContext context, Object object, String name, Object value) {
if (name.equals("DATE OF BIRTH")) {
return "NOT TO DISCLOSE";//設(shè)置value的值
}
if (value.equals("John")) {
return ((String) value).toUpperCase();//轉(zhuǎn)換value
} else {
return null;
}
}
};
String jsonOutput = JSON.toJSONString(listOfPersons, valueFilter);
}
使用 NameFilter 和 SerializeConfig
NameFilter: 序列化時(shí)修改 Key驼唱。
SerializeConfig:內(nèi)部是個(gè)map容器主要功能是配置并記錄每種Java類型對(duì)應(yīng)的序列化類。
@Test
public void givenSerializeConfig_whenJavaObject_thanJsonCorrect() {
NameFilter formatName = new NameFilter() {
public String process(Object object, String name, Object value) {
return name.toLowerCase().replace(" ", "_");
}
};
SerializeConfig.getGlobalInstance().addFilter(Person.class, formatName);
String jsonOutput =
JSON.toJSONStringWithDateFormat(listOfPersons, "yyyy-MM-dd");
}