狭义序列化: 序列化 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