jackson fastjson 对比 小计

狭义序列化: 序列化 bean to json 反序列化 json to bean 

别名

关于反序列化标记别名给bean赋值

jackson

@JsonAlias({"xxx","xxxx"})

fastjson

 在fast json中功能设置大多在JSONField 中

@JSONField(alternateNames = {"xx", "xxxx"})

字段名称

jackson

@JsonProperty("xxx")

fastjson

@JSONField(name="xx")

日期格式

jackson

@JsonFormat(timezone = "GMT+8", pattern = "yyyyMMdd")

fastjson

@JSONField(format="yyyyMMdd")

未知属性接序列和反序列

jackson

用一个map装 下面的注解放在get set方法上
@JsonAnyGetter
@JsonAnySetter

fastjson

get方法
 @JSONField(name = "_any", unwrapped = true, serialize = true, deserialize = false)
set方法
 @JSONField(name = "_any", unwrapped = true, serialize = false, deserialize = false)

忽略字段

jackson

忽略
@JsonIgnore
如果为null 就不序列化
@JsonInclude(JsonInclude.Include.NON_NULL)

fastjson

忽略
@JSONField(deserialize=false)
fastjson是默认忽略为null的值,在转string可以设置保留null 
String bodyStr=JSONObject.toJSONString(body, SerializerFeature.WriteMapNullValue);

节点操作

fastjson
可使用快捷操作类 JSON

JSON  快速序列化与反序列化
树的节点
JsonObject 本质为map 代表json中的bean节点
JsonArray 本质为List<JsonObject> 代表json中的array节点

jackson

需要实例化一个ObjectMapper再进行序列化操作

ObjectMapper mapper = new ObjectMapper();  
mapper.readValue() 反序列
objectMapper.writeValueAsString() 序列
树的节点 
JsonNode 代表一个json中的节点 不可变
ObjectNode 代表一个bean的节点 JsonNode子类 通用做法创建一个空的bean再把jsonNode放进去
ArrayNode 代表一个数组节点
也可强转使用Node

jackson的节点操作有点别扭

JsonPath 节点查询

jackson可使用Jayway JsonPath操作
fastjson可直接使用jsonpath

操作基本相同

参考资料

https://www.iflym.com/index.php/code/202103220001.html
https://www.w3cschool.cn/fastjson/fastjson-jsonfield.html
https://blog.csdn.net/wangmx1993328/article/details/88598625

原文地址:https://www.cnblogs.com/funkboy/p/15207205.html