1、fastjson将字符串反序列化为对象时,只会处理第一层,内部会序列化为JsonObject或者JsonArray,使用二级结构和三级结构时还要再次处理, 优点就是快,特别快。
2、jackson会将深层字符串一起序列化
public class Demo {
public static void main(String [] args){
String orderInfo = "{\n" +
"\"orderId\":\"100\",\n" +
"\"orderCode\":\"O3138141\",\n" +
"\"orderGoodsInfo\":[\n" +
"{\n" +
"\"orderGoodsId\":\"4000\",\n" +
"\"orderGoodsName\":\"鞋子\"\n" +
"},{\n" +
"\"orderGoodsId\":\"5000\",\n" +
"\"orderGoodsName\":\"袜子\"\n" +
"}\n" +
"],\n" +
"\"address\":{\n" +
"\"provCode\":\"1907\",\n" +
"\"provName\":\"江苏省\",\n" +
"\"provEnName\":\"jiangsusheng\",\n" +
"\"provEnHeader\":\"j\",\n" +
"\"detail\":\"江苏省南京市软件大道\"\n" +
"}\n" +
"}";
System.out.println(orderInfo);
System.out.println("\n\n\n======================== fastjson ===========================");
LinkedHashMap fastjson = JSON.parseObject(orderInfo, LinkedHashMap.class);
fastjson.forEach((key, value) -> {
String valueType = value.getClass().getName();
System.out.println(key + " ===== " + value + " ====== " + valueType);
});
System.out.println("\n\n\n======================== jackson ===========================");
LinkedHashMap jackson = JsonTools.defaultMapper().fromJson(orderInfo, LinkedHashMap.class);
jackson.forEach((key, value) -> {
String valueType = value.getClass().getName();
System.out.println(key + " ===== " + value + " ====== " + valueType);
});
}
}
运行结果:
看到以上的序列化结果的区别了吧
如果不知名反序列化的数据结构, fastjson会按照HashMap处理, 而jackson 按照 LinkedHashMap 处理