【整理】目标移除fastjson,采用jackson的一些方法使用

由于fastjson的安全漏洞,文章介绍了如何切换到jackson进行json操作。包括使用ObjectMapper实例化,将Map转换为Json字符串,从Json字符串获取对象,使用instanceof判断json格式,遍历key,解析json为List以及修改对象值的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近官方宣布fastjson有漏洞,于是一波修改需求迎面扑来。总结下使用jackson的写法。

实战

0.前置,需要定义ObjectMapper对象,才进行json的格式处理。

ObjectMapper mapper = new ObjectMapper;

1、Map对象(自己看着玩吧)转Json格式字符串

Map<String,String> map = new HashMap<>();
map.put("abc","123");

try {
	System.out.println(mapper.writeValueAsString(map));
} catch (JsonProcessingException e) {
	e.printStackTrace();
}

2、从Json字符串中取出未指定的对象,相当与fastjson的JSONObject对象(JSON.parseObject(jsonString))

try {
	JsonNode node = mapper.readTree(json);
	System.out.println(node.get("abc"));
	System.out.println(node.get("abc").toString());
	System.out.println(node.get("abc").asTest());
} catch (JsonProcessingException e) {
	e.printStackTrace();
}

这里可以看出直接get、get后使用toString和get后使用asTest的区别。

asTest 的结果不【""】符号,显示是123
而get和toString显示是 “123”

3、instanceof方法,在fastjson会拿他来判断取出的数据是否为json格式。(报文某个栏位的值也是json格式,判断会使用到)

try {
    json = "{\"abc\":{\"a1\":\"1\",\"a2\":\"2\"},\"def\":\"123\"}";
	JsonNode node = mapper.readTree(json);
	System.out.println(node.get("abc").isObject());
	System.out.println(node.get("abc").get("a1").isObject());
	System.out.println(node.get("def").isObject());
} catch (JsonProcessingException e) {
	e.printStackTrace();
}

除了isObject 判断是否是json格式的值外,还有isArray判断数组… 等等。

4、fieldNames遍历所有的key

try {
	JsonNode node = mapper.readTree(json);
	Iterator it = node.fieldNames();
	while (it.hasNext()) {
		System.out.println(it.next());
	}
} catch (JsonProcessingException e) {
	e.printStackTrace();
}

5、解析json返回List数据

try {
	JsonNode node = mapper.readTree(json);
	JsonNode listString = node.get("list");
	List<对象> list = new ArrayList<>();
	for (JsonNode string:listString) {
		list.add(mapper.readValue(string.toString(),对象.class))
	}
} catch (JsonProcessingException e) {
	e.printStackTrace();
}

6、修改对象的值

try {
	JsonNode node = mapper.readTree(json);
	((ObjectNode)node).set("key",node.get("abc"));
} catch (JsonProcessingException e) {
	e.printStackTrace();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值