Jackson对应FastJson的JSONObject的对象JsonNode详解
fastjson
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
项目地址:https://gitcode.com/gh_mirrors/fastj/fastjson
·
版权说明: 本文由博主keep丶原创,转载请注明出处。
原文地址: https://blog.csdn.net/qq_38688267/article/details/124614982
背景
因公司要求,将项目中的FastJson移除,改为用Jackson;因此需要将代码中的JSONObject相关操作替换成Jackson中的对象:JsonNode。
FastJson对应的Jackson相关对象/操作
| 对象/操作 | FastJson | Jackson |
|---|---|---|
| json对象 | JSONObject | ObjectNode |
| json集合 | JSONArrray | ArrayNode |
| 创建json对象 | JSON.parseObject() | ObjectMapper.readTree() |
| 获取json对象中的json对象 | jsonObject.getJSONObject(<KEY>) | jsonNode.with(<KEY>) |
| 获取json对象中的集合对象 | jsonObject.getJSONArray(<KEY>) | jsonNode.withArray(<KEY>) |
JsonNode使用注意点
应定义全局ObjectMapper
在解析json字符串时,FastJson可以直接通过静态类进行转换,Jackson转换json字符串需要用到ObjectMapper类,有些同学可能会每次需要转换时,就new一个ObjectMapper,这样是不可取的,一方面是性能问题,另一方面是ObjectMapper在初始化时,是可以定义很多配置的。
因此一般情况下需要将ObjectMapper定义为一个bean,在需要用到的时候注入。如果项目上存在几种不同的序列化方式,则可以定义多个ObjectMapper的bean,这样在使用时会更方便。
jsonNode.with()和jsonNode.withArray()注意点
调用这两个方法时,如果传入的Key不存在的话,会在这个Json对象中创建一个名字为Key的属性,值为{}(with方法)或[](withArray方法)。例:
// jsonNode的值假设为:{"a":123,"b":456}
ObjectNode c = jsonNode.with("c");
// 此时c的值为:{},jsonNode的值为:{"a":123,"b":456,"c":{}}
// jsonNode的值假设为:{"a":123,"b":456}
ArrayNode c = jsonNode.withArray("c");
// 此时c的值为:[],jsonNode的值为:{"a":123,"b":456,"c":[]}
因此如果不是确定有这个字段的情况下,可以先用JsonNode.has()方法判断一下是否存在该字段。这个特点在一定情况下也可以妙用。
补充
ObjectMapper配置类样例:
@Bean
public ObjectMapper defaultMapperCreator() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule()).registerModule(new ParameterNamesModule()).registerModules(ObjectMapper.findModules());
//是否允许使用注释
// mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
//字段允许去除引号
// mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
//允许单引号
// mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
//允许转义字符
// mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
//严格重复检测
// mapper.configure(JsonParser.Feature.STRICT_DUPLICATE_DETECTION, true);
//不检测失败字段映射
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//时间字段输出时间戳
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
//时间输出为毫秒而非纳秒
mapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false);
//空对象不出错
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
//时间读取为毫秒而非纳秒
mapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false);
//不输出空值字段
mapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);
mapper.setTimeZone(systemTimeZone);
// mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
return mapper;
}
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
最近提交(Master分支:4 个月前 )
c942c834 - 2 年前
5bc4709b - 2 年前
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)