jackson fastjson 对比 小计

序列化:将对象写入到IO流中
反序列化:从IO流中恢复对象
意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
使用场景:所有可在网络上传输的对象都必须是可序列化的,比如RMI(remote method invoke,即远程方法调用),传入的参数或返回的对象都是可序列化的,否则会出错;所有需要保存到磁盘的java对象都必须是可序列化的。
————————————————
版权声明:本文为CSDN博主「Meiko丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010365819/article/details/119001282

别名

关于反序列化标记别名给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

操作基本相同

Json 序列化反序列化key格式 实体统一格式


参考资料

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

posted @ 2021-08-30 18:06  大哥超帅  阅读(208)  评论(0编辑  收藏  举报