Jackson的快速入门及高级应用

Jsckson 是一个支持解析json和xml数据格式的java类库,简单易用(相对来说),性能较高。是目前流行的JSON处理框架之一,今天就让我们来对jackson进行一个快速的入门和深入的了解。

Maven依赖

	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-databind</artifactId>
	    <version>2.9.3</version>
	</dependency>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-core</artifactId>
	    <version>2.9.3</version>
	</dependency>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-annotations</artifactId>
	    <version>2.9.3</version>
	</dependency>

注意: SpringBoot的spring-boot-starter-web包默认引入了jackson的包,可以直接上手! 无需重复引包,可以避免重复引包导致的jar包冲突!

1、序列化(将Java对象转成JSON格式的字符串)

// 创建ObjectMapper对象(jackson所有的操作都是基于ObjectMapper对象来进行的)
ObjectMapper objectMapper = new ObjectMapper();
// 创建一个ObjectNode对象 PS:等同于fastjson中的JSONObject,数据结构等同于java的Map
ObjectNode jsonObj = objectMapper.createObjectNode();
// 往jsonObject对象中put值
jsonObj.put("name", "xiaoming");
jsonObj.put("age", "18");
// 创建一个ArrayNode对象 PS:等同于fastjson中的JSONArray,数据结构等同于java的ArrayList
ArrayNode jsonArr = objectMapper.createArrayNode();
// 往jsonArr里新增一个对象
jsonArr.add(jsonObj);

// 将ObjectNode和ArrayNode对象转出字符串
System.out.println(objectMapper.writeValueAsString(jsonObj));
System.out.println(objectMapper.writeValueAsString(jsonArr));

打印结果:

{"name":"xiaoming","age":"18"}
[{"name":"xiaoming","age":"18"}]

总结: jackson常用的处理对象有两个,分别是ObjectNode和ArrayNode对象,对应fastjson中的JSONObject和JSONArray对象,在日常工作中,我们也都是依据这两个对象来对数据进行操作。

2、反序列化(将JSON格式字符串转成java对象)

String jsonString = objectMapper.writeValueAsString(jsonObj);
String jsonArrString = objectMapper.writeValueAsString(jsonArr);
// json转Map
Map<String ,Object> map = objectMapper.readValue(jsonString, Map.class);
// json转List
ArrayList arrayList = objectMapper.readValue(jsonArrString, ArrayList.class);

//json转map<String,Object>
JavaType jvt = objectMapper.getTypeFactory().constructParametricType(HashMap.class,String.class,Object.class);
Map<String,Object> jvtMap = objectMapper.readValue(jsonString, jvt);

//json转list<Map<String, Object>>
JavaType jt = objectMapper.getTypeFactory().constructParametricType(ArrayList.class, Map.class);
List<Map<String, Object>> jvtList = objectMapper.readValue(jsonArrString, jt);

打印:

{name=xiaoming, age=18}
[{name=xiaoming, age=18}]
{name=xiaoming, age=18}
[{name=xiaoming, age=18}]

3、获取数据

// 获取JsonNode对象
jsonObj.get("name");
// 获取JsonNode对象后转为String(有空指针风险)
jsonObj.get("Val").asText();
// 获取JsonNode对象后转为Boolean(有空指针风险)
jsonObj.get("Val").asBoolean();
// 获取JsonNode对象后转为Double(有空指针风险)
jsonObj.get("Val").asDouble();
// 获取JsonNode对象后转为Int(有空指针风险)
jsonObj.get("Val").asInt();
// 获取JsonNode对象后转为Long(有空指针风险)
jsonObj.get("Val").asLong();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
jackson2.11.0是指jackson的最新版本,它包括jackson-core-2.11.0.jar、jackson-databind-2.11.0.jar和jackson-annotation-2.11.0.jar这三个文件。 建议使用jackson的2.11.0及以上版本,原因如下: 1. 较低版本的jackson-databind存在反序列化远程代码执行漏洞(CVE-2020-35490/CVE-2020-35491),攻击者可以通过精心构造的恶意数据利用该漏洞执行任意代码。因此,为了安全起见,建议使用2.11.0及以上版本。 2. jackson-databind 2.11.0及以上版本与spring-boot版本兼容,这意味着你可以在使用spring-boot框架的项目中使用这些版本。 如果你想在项目中使用jackson的XML数据格式支持,你需要引入以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.11.0</version> </dependency> ``` 这将使你能够在项目中使用jackson来处理XML格式的数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jackson-2.11.0.zip](https://download.csdn.net/download/weixin_43268636/12503301)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [解决jackson版本和springboot版本不兼容的问题](https://blog.csdn.net/qq_44837912/article/details/124934030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [json处理-Jackson使用总结](https://blog.csdn.net/yuexiaqiying/article/details/109227279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值