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格式 实体统一格式
fastjson
@JSONType(naming = PropertyNamingStrategy.SnakeCase)
jackson
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
参考资料
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