jackson如何创建json对象和jackson工具类
由于阿里巴巴的fastjson经常爆出漏洞,需要频繁升级版本,单位研发部调研随后决定使用jackson作为json解析的工具,我就粗略研究了一下如何使用jackson创建中间json对象,大致测试如下(建供参考):
首先添加maven依赖:
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.6</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.6</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.6</version></dependency>
- 构建json对象
public static void main(String[] args) throws IOException {ObjectMapper mapper = new ObjectMapper();ObjectNode rootNode = mapper.createObjectNode();ObjectNode childNode1 = mapper.createObjectNode();childNode1.put("name1","val1");childNode1.put("name2","val2");rootNode.set("obj1",childNode1);ObjectNode childNode2 = mapper.createObjectNode();childNode2.put("name3","val3");childNode2.put("name4","val4");rootNode.set("obj2",childNode2);ObjectNode childNode3 = mapper.createObjectNode();childNode3.put("name5","val5");childNode3.put("name6","val6");ArrayNode arrayNode = mapper.createArrayNode();arrayNode.add(childNode1);arrayNode.add(childNode2);arrayNode.add(childNode3);rootNode.set("obj3",childNode3);rootNode.set("obj4",arrayNode);String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode);System.out.println(jsonString);ObjectNode jsonNodes = mapper.readValue(jsonString, ObjectNode.class);System.out.println(jsonNodes.get("obj4"));System.out.println(jsonNodes);}
输出结果:
{"obj1" : {"name1" : "val1","name2" : "val2"},"obj2" : {"name3" : "val3","name4" : "val4"},"obj3" : {"name5" : "val5","name6" : "val6"},"obj4" : [ {"name1" : "val1","name2" : "val2"}, {"name3" : "val3","name4" : "val4"}, {"name5" : "val5","name6" : "val6"} ]
}
[{"name1":"val1","name2":"val2"},{"name3":"val3","name4":"val4"},{"name5":"val5","name6":"val6"}]
{"obj1":{"name1":"val1","name2":"val2"},"obj2":{"name3":"val3","name4":"val4"},"obj3":{"name5":"val5","name6":"val6"},"obj4":[{"name1":"val1","name2":"val2"},{"name3":"val3","name4":"val4"},{"name5":"val5","name6":"val6"}]}
具体序列化工具大致封装了一下 如下:
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.JsonParser.Feature;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class JSONUtil {private static final Logger log = LoggerFactory.getLogger(JSONUtil.class);public JSONUtil() {}public static String toJSONString(Object data) {if (ObjectUtil.isEmpty(data)) {return "";} else {ObjectMapper objectMapper = new ObjectMapper();objectMapper.setSerializationInclusion(Include.NON_NULL);objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);objectMapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);objectMapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);try {return objectMapper.writeValueAsString(data);} catch (JsonProcessingException var3) {log.error("JSONUtil.toJSONString.error", var3);return "";}}}public static <T> T parseObject(String jsonStr, Class<T> clazz) {if (ObjectUtil.isEmpty(jsonStr)) {return null;} else {ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);objectMapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);try {return objectMapper.readValue(jsonStr, clazz);} catch (JsonProcessingException var4) {log.error("JSONUtil.parseObject.error", var4);return null;}}}public static <T> T parseObject(String jsonStr, TypeReference<T> valueTypeRef) {if (ObjectUtil.isEmpty(jsonStr)) {return null;} else {ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);objectMapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);try {return objectMapper.readValue(jsonStr, valueTypeRef);} catch (Exception var4) {log.error("JSONUtil.parseObject.TypeReference.error", var4);return null;}}}public static <T> T parseSnakeObject(String json, Class<T> clazz) {if (ObjectUtil.isEmpty(json)) {return null;} else {ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);objectMapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);try {return objectMapper.readValue(json, clazz);} catch (JsonProcessingException var4) {log.error("JSONUtil.parseSnakeObject.error", var4);return null;}}}
}
自己查看需要的:更多大请移步官网看用法:jackson-core
jackson如何创建json对象和jackson工具类相关推荐
- javascript学习-创建json对象数据,遍历
之前我已经有讲过后台返回json数据到前台,并在前台遍历json数据. 这里讲下直接在JS里创建JSON数据,然后遍历使用~ 创建代码例如以下:(创建的是JSON对象) var YearSelect ...
- 在 JavaScript 中创建 JSON 对象
<html> <body> <h2>在 JavaScript 中创建 JSON 对象</h2><p> Name: <span id=& ...
- Java创建JSON对象
Java创建JSON对象 private void getJson(HttpServletRequest request, HttpServletResponse response)throws Se ...
- 装饰器/使用类和对象封装一个工具类
# coding:utf-8 # 装饰器是以@开头,@结构称为语法糖,装饰器的作用主要是给现有的函数增加一些额外的功能. # @classmethod # @staticmethod # @prope ...
- Java通用工具类之按对象属性排序工具类
本工具类为按对象属性排序工具类,实现的功能: 1.按对象的一个属性和多个属性进行排序. 2.按对象属性正序和倒序排列. 3.完美支持int等基础类和Integer等包装类. 4.完美支持属性为实现了C ...
- 税务局接口-xml格式和对象互转工具类使用说明
税务局接口-xml格式和对象互转工具类使用说明 注意: 由于税务局接口请求xml数据和返回xml数据和常规的不一样,所以手动写了一个工具类,本工具类只针对税务局xml请求参数和返回参数与对象互相. 说 ...
- JSON字符串与对象,日期对象的转换工具类实现
代码如下: package com.chuang.utils;import com.fasterxml.jackson.core.JsonProcessingException; import com ...
- Redis学习篇3_事务及其监控(锁)、Jedis、SpringBoot整合Redis、RedisTemplate的json序列化、RedisUtil工具类
目录 事务及其监控(锁) Jedis SpringBoot整合Redis RedisTemplate 默认RedisTemplate来源 关于中文序列化问题 RedisUtil工具类 一.事务及其监控 ...
- 对象拷贝的工具类DeepBeanUtils
创建一个对象拷贝的工具类 在Spring 开发框架内部提供有一个BeanUJtils工具类,这个工具类有一个最大的特点就是可以直接实现对象的数据的拷贝操作,可是这个拷贝操作不包含有集合数据的拷贝处理. ...
最新文章
- 【mybatis】mybatis中 返回map集合
- 使用Java操作Redis(二)
- RV1108开发环境搭建
- XManager 远程连接Netbackup图形用户界面
- 服务器怎样共享文件夹共享文件夹,服务器怎样共享文件夹共享文件夹
- 我心中的核心组件~HttpHandler和HttpModule实现图像的缩放与Url的重写
- 【干货】2021技术展望:开拓新局,掌握变局时代的技术先机-埃森哲.pdf(附下载链接)
- Linux下的dhcp测试实现方法
- Ubuntu 安装 Java EE
- 淘淘商城简介——淘淘商城(一)
- 60个Java练手项目案例,看了让你茅塞顿开~
- 跟着团子学SAP PS:项目计划成本与项目预算设计思路
- Python制作经典坦克大战小游戏
- 360校招——最后赢家(C++)
- gateway配合nacos路由报错:Unable to find instance for XXX
- 渗透学习日记day3
- 伽罗华域上(Galois Field)上的四则运算-笔记
- 进入BeOS的花花世界 系列九
- 等值连接mysql_数据库等值连接,左连接,右连接的区别
- php 简转繁体,PHP将简体汉字转为繁体的方法