1.基本使用,序列化和反序列化
序列化
public class JacksonTest {
static ObjectMapper objectMapper = new ObjectMapper();
public static void main(String[] args) throws JsonProcessingException {
Person person = new Person();
person.setName("jacksonTest");
person.setAge(38);
String str = objectMapper.writeValueAsString(person);
System.out.println(str);//{"name":"jacksonTest","age":38}
}
}
反序列化
public class JacksonTest {
static ObjectMapper objectMapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
String str = "{\"name\":\"jacksonTest\",\"age\":38}";
Person person = objectMapper.readValue(str, Person.class);
System.out.println(person);//Person(name=jacksonTest, age=38)
}
}
2.反序列化,转带有泛型的,例如List<String>, Map<String, Object> 等 使用 TypeReference
public class JacksonTest {
static ObjectMapper objectMapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
String str = "[{\"name\":\"jacksonTest1\",\"age\":38},{\"name\":\"jacksonTest2\",\"age\":238}]";
List<Person> l1 = objectMapper.readValue(str, new TypeReference<List<Person>>() {});
System.out.println(l1);
List<Person> l2 = objectMapper.readValue(str, List.class);
System.out.println(l2);
}
}
上述代码分别展示了使用TypeReference和未使用TypeReference的情况
主要想说明不使用TypeReference,复杂对象json数组解析出来的是map。后续如果想遍历再调用Person对象的get方法会报错
3.类比fastJson的JsonObject -> ObjectNode, JsonArray -> ArrayNode(内部是ObjectNode)
对象 | 数组 | |
---|---|---|
fastJson | JsonObject | JsonArray |
Jackson | JsonNode | ArrayNode |
JsonNode (主要说明ObjectNode)
创建
JsonNode不能像JsonObject直接new
//依赖于objectMapper创建
ObjectNode objectNode = objectMapper.createObjectNode();
//不依赖与objectMapper,使用JsonNodeFactory
ObjectNode objectNode = JsonNodeFactory.instance.objectNode();
添加
JsonNode是父类,不能直接put,它的子类ObjectNode表示是一个Object
只有ObjectNode才可以使用put或putPOJO方法添加元素
删除
remove(String fieldName)
查询元素
get(String fieldName);//如果查不到,返回一个null
with(String propertyName);//只能取ObjectNode,如果对应的value不是ObjectNode,会抛异常。如果取不到,会在原始json中插入一个空Object
path(String fieldName);//如果查不到,返回的不是null,而是一个MissingNode
at(String var1);//支持更灵活的路径表达,可以用于深度导航、过滤等
//JsonNode node = rootNode.at("/path/to/node");
ArrayNode
创建
ArrayNode的创建依赖于objectMapper
ArrayNode arrayNode = objectMapper.createArrayNode();
添加
add(JsonNode value)
删除
remove(int index)
查询元素
和JsonNode使用类似,要注意方法要使用入参是integer的
4.ObjectMapper的初始化配置
objectMapper可以做一些初始化配置
DeserializationFeature 反序列化的配置
SerializationFeature 序列化的配置
DeserializationFeature | 说明 |
---|---|
USE_BIG_DECIMAL_FOR_FLOATS |
SerializationFeature | 说明 |
---|