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

前言

最近官方宣布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();
}

你可能感兴趣的:(C1-Java)