jackson 中各种 json 类型相互转换
jackson 中各种 json 类型相互转换
spring web 中默认使用 jackson
jackson 中解析 json 所用到的类
- com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper 是类似一个工具的类,其中包含了一些 json 转换的方法,一般在 spring 中通过 @Autowired 注入bean
- com.fasterxml.jackson.databind.JsonNode;
JsonNode 是类似 fastjson 中的JsonObject类,底层都是通过 LinkedHashMap 实现,但是只能 get 属性,不能 set 属性
- com.fasterxml.jackson.databind.node.ObjectNode;
ObjectNode 是 JsonNode 的子类,实现的 JsonNode 不能 set 属性的缺陷, 可以通过 objectMapper.createObjectNode() 创建ObjectNode实例,或者直接对 JsonNode 强制转换
- com.fasterxml.jackson.databind.node.ArrayNode;
ArrayNode 与 ObjectNode 类似,但是其代表的是一个列表类型的JSON对象,可通过 add() 方法添加元素,或者通过 addAll() 添加集合
- com.fasterxml.jackson.core.type.TypeReference;
TypeReference 是 objectMapper.readValue(String content, TypeReference valueTypeRef) 方法将字符串解析成复杂对象是所需要的参数。
复杂对象指的是如 List,Bean[],Map 等一系列广义集合类型
class Person {
private String id;
private String name;
//todo 省略getter/setter
}
String jsonStr = "{\"id\":\"123\",\"name\":\"张三\"}";
Person person = objectMapper.readValue(jsonStr, Person.class);
String jsonArrayStr = "[{\"id\":\"123\",\"name\":\"张三\"},{\"id\":\"456\",\"name\":\"李四\"}]";
List personList = objectMapper.readValue(jsonArrayStr, new TypeReference>() {});
另外附上自己封装的 util 工具
package com.example.myutil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class JsonUtil {
public static final ObjectMapper objectMapper = new ObjectMapper();
static {
//忽略字段不匹配错误
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
/**
* 创建 ObjectNode
* @return
*/
public static ObjectNode createJson() {
return objectMapper.createObjectNode();
}
/**
* 字符串转 java bean
* @param json
* @param clazz
* @param
* @return
*/
public static T string2Bean(String json, Class clazz){
T t = null;
try {
t = objectMapper.readValue(json,clazz);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return t;
}
/**
* 字符串转 Map
* @param json
* @param clazz
* @param
* @return
*/
public static Map string2Map(String json, Class clazz){
Map map = null;
try {
map = objectMapper.readValue(json, new TypeReference