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();
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值