fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。本文介绍下fastjson的基本使用方法,包括序列化和反序列化;文中所使用到的软件版本:Java 1.8.0_191、fastjson1.2.62。
1、引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
2、序列化
public static String serialize() {
MyBean bean = new MyBean();
bean.setS("测试字符串");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -1);
bean.setD(calendar.getTime()); List<MyBean> list = new ArrayList<MyBean>();
list.add(bean);
Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
map.put("data", list); /*
* "yyyy-MM-dd HH:mm:ss" 设置日期格式,也可在类属性上使用@JSONField(format="yyyy-MM-dd HH:mm:ss")注解来设置
* SerializerFeature.WriteMapNullValue 输出值为null的字段
* SerializerFeature.WriteNullStringAsEmpty 字符串如果为null则输出""
*/
String result = JSON.toJSONStringWithDateFormat(map, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
System.out.println(result);
return result;
}
3、反序列化
public static void deserialize() {
String s = serialize();
TypeReference<Map<String, List<MyBean>>> type = new TypeReference<Map<String, List<MyBean>>>(){};
Map<String, List<MyBean>> map = JSON.parseObject(s, type);
System.out.println(map); //直接通过api获取相应数据
JSONObject jsonObject = JSON.parseObject(s);
JSONArray JsonArray = jsonObject.getJSONArray("data");
JSONObject bean = JsonArray.getJSONObject(0);
System.out.println(bean.getString("s"));
//...
}
4、完整例子
package com.inspur.demo.json; import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature; /**
* fastjson操作JSON数据
*/
public class FastjsonCase {
/**
* 序列化
*/
public static String serialize() {
MyBean bean = new MyBean();
bean.setS("测试字符串");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -1);
bean.setD(calendar.getTime()); List<MyBean> list = new ArrayList<MyBean>();
list.add(bean);
Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
map.put("data", list); /*
* "yyyy-MM-dd HH:mm:ss" 设置日期格式,也可在类属性上使用@JSONField(format="yyyy-MM-dd HH:mm:ss")注解来设置
* SerializerFeature.WriteMapNullValue 输出值为null的字段
* SerializerFeature.WriteNullStringAsEmpty 字符串如果为null则输出""
*/
String result = JSON.toJSONStringWithDateFormat(map, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
System.out.println(result);
return result;
} /**
* 反序列化
*/
public static void deserialize() {
String s = serialize();
TypeReference<Map<String, List<MyBean>>> type = new TypeReference<Map<String, List<MyBean>>>(){};
Map<String, List<MyBean>> map = JSON.parseObject(s, type);
System.out.println(map); //直接通过api获取相应数据
JSONObject jsonObject = JSON.parseObject(s);
JSONArray JsonArray = jsonObject.getJSONArray("data");
JSONObject bean = JsonArray.getJSONObject(0);
System.out.println(bean.getString("s"));
//...
} public static void main(String[] args) {
serialize();
deserialize();
} }
FastjsonCase
package com.inspur.demo.json; import java.util.Arrays;
import java.util.Date; public class MyBean {
private String s = "字符串";
private String s2;
private String s3 = "字符串3";
private int i = 123;
private Integer i2;
private char c = '到';
private char[] c2 = new char[]{'a', 'b'};
private Date d = new Date();
private Date[] d2 = new Date[]{new Date(), new Date()};
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public String getS2() {
return s2;
}
public void setS2(String s2) {
this.s2 = s2;
}
public String getS3() {
return s3;
}
public void setS3(String s3) {
this.s3 = s3;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public Integer getI2() {
return i2;
}
public void setI2(Integer i2) {
this.i2 = i2;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public char[] getC2() {
return c2;
}
public void setC2(char[] c2) {
this.c2 = c2;
}
public Date getD() {
return d;
}
public void setD(Date d) {
this.d = d;
}
public Date[] getD2() {
return d2;
}
public void setD2(Date[] d2) {
this.d2 = d2;
}
@Override
public String toString() {
return "MyBean [s=" + s + ", s2=" + s2 + ", s3=" + s3 + ", i=" + i + ", i2=" + i2 + ", c=" + c + ", c2="
+ Arrays.toString(c2) + ", d=" + d + ", d2=" + Arrays.toString(d2) + "]";
}
}
MyBean