在项目中使用到了fastjson,故研究了一下。现将自己的几个测试用例和大家分享一下~
首先在pom.xml文件中,加入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.8</version>
</dependency>
创建一个实体类:
public class XwjUser implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String message;
private Date sendTime;
// 这里手写字母大写,只是为了测试使用,是不符合java规范的
private String NodeName;
private List<Integer> intList;
public XwjUser() {
super();
}
public XwjUser(int id, String message, Date sendTime) {
super();
this.id = id;
this.message = message;
this.sendTime = sendTime;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public String getNodeName() {
return NodeName;
}
public void setNodeName(String nodeName) {
NodeName = nodeName;
}
public List<Integer> getIntList() {
return intList;
}
public void setIntList(List<Integer> intList) {
this.intList = intList;
}
@Override
public String toString() {
return "XwjUser [id=" + id + ", message=" + message + ", sendTime=" + sendTime + ", intList=" + intList + "]";
}
}
接下来看测试用例:
1、对象与json
@Test
public void testObject() {
XwjUser user = new XwjUser(1, "Hello World", new Date());
user.setNodeName("node");
// 第二个参数为是否格式化json
String jsonStr = JSON.toJSONString(user, true);
System.out.println("对象转为字符串:" + jsonStr);
XwjUser userDes = JSON.parseObject(jsonStr, XwjUser.class);
System.out.println("字符串转为对象:" + userDes);
}
运行结果:
对象转为字符串:{
"id":1,
"message":"Hello World",
"nodeName":"node",
"sendTime":1525222546733
}
字符串转为对象:XwjUser [id=1, message=Hello World, sendTime=Wed May 02 08:55:46 CST 2018, intList=null]
注意事项:
1、对象转json字符串时,对象中的NodeName首字母是大写,转出来是小写。
2、json转对象时,实体类中一定要加上默认的无参构造器
2、map与json
@Test
public void testMap() {
Map<String, Object> testMap = new HashMap<>();
testMap.put("name", "merry");
testMap.put("age", 30);
testMap.put("date", new Date());
testMap.put("isDel", true);
testMap.put("user", new XwjUser(1, "Hello World", new Date()));
String jsonStr = JSON.toJSONString(testMap);
System.out.println("Map转为字符串:" + jsonStr);
Map<String, Object> mapDes = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>() {});
System.out.println("字符串转map:" + mapDes);
}
Map转为字符串:{"date":1525223256653,"name":"merry","isDel":true,"user":{"id":1,"message":"Hello World","sendTime":1525223256654},"age":30}
字符串转map:{date=1525223256653, name=merry, isDel=true, user={"id":1,"message":"Hello World","sendTime":1525223256654}, age=30}
3、list与json
@Test
public void testMapList() {
List<Map<String, Object>> mapList = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "merry");
map1.put("age", 30);
map1.put("date", new Date());
map1.put("isDel", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "jim");
map2.put("age", 28);
map2.put("isDel", false);
mapList.add(map1);
mapList.add(map2);
String jsonStr = JSON.toJSONString(mapList);
System.out.println("list转为字符串:" + jsonStr);
// 传入泛型类型
List<Map> listDes = JSON.parseArray(jsonStr, Map.class);
System.out.println("字符串转为list:" + listDes);
}
list转为字符串:[{"date":1525223309870,"name":"merry","isDel":true,"age":30},{"name":"jim","isDel":false,"age":28}]
字符串转为list:[{date=1525223309870, name=merry, isDel=true, age=30}, {name=jim, isDel=false, age=28}]
注意:使用JSON.parseArray时,传入list中的泛型
4、json中日期格式化
@Test
public void testDateFormat() {
Date now = new Date();
String dateStr = JSON.toJSONString(now);
System.out.println("默认日期:" + dateStr);
// 按照指定格式格式化日期,格式为yyyy-MM-dd HH:mm:ss
String dateStr2 = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
System.out.println("格式化日期:" + dateStr2);
String dateStr3 = JSON.toJSONStringWithDateFormat(now, "yyyy-MM-dd HH:mm");
System.out.println("格式化日期:" + dateStr3);
}
默认日期:1525223374867
格式化日期:"2018-05-02 09:09:34"
格式化日期:"2018-05-02 09:09"
5、json字符串输出单引号
@Test
public void testSingleQuotes() {
List<Object> list = new ArrayList<>();
list.add("home");
list.add("hello");
list.add(true);
list.add(45.78);
String listJson = JSON.toJSONString(list, SerializerFeature.UseSingleQuotes);
System.out.println("转为单引号字符串:" + listJson);
}
转为单引号字符串:['home','hello',true,45.78]
6、改变json字符串中默认不输出值为null字段
@Test
public void testNull() {
Map<String, Object> testMap = new HashMap<>();
testMap.put("name", "merry");
testMap.put("age", 30);
testMap.put("date", null);
// 缺省情况下,FastJSON不输入为值Null的字段
String jsonStr = JSON.toJSONString(testMap);
System.out.println("转为字符串:" + jsonStr);
String jsonStr2 = JSON.toJSONString(testMap, SerializerFeature.WriteMapNullValue);
System.out.println("转为字符串:" + jsonStr2);
}
转为字符串:{"name":"merry","age":30}
转为字符串:{"date":null,"name":"merry","age":30}
关于SerializerFeature中的常量属性含义,可以参考fastjson SerializerFeature详解
本文示例源码地址:https://github.com/xuwenjin/xwj_repo/tree/master/xwj-impl
知识改变世界