# 一.基本介绍
# 1.什么是 jackson?
Jackson 是一个用于在 Java 应用程序中处理 JSON 格式数据的开源库。它提供了一组功能强大的工具,使开发人员能够轻松地在 Java 对象和 JSON 数据之间进行转换。Jackson 库包含多个模块,其中最常用的两个是:
jackson-databind: 这是 Jackson 库的核心模块,提供了 JSON 和 Java 对象之间的数据绑定。它允许你将 Java 对象转换为 JSON 格式(序列化),或将 JSON 数据转换为 Java 对象(反序列化)。
jackson-core: 这个模块提供了一些基本的 JSON 处理功能,如读取和写入 JSON 树模型。它是 jackson-databind 的基础。
使用 Jackson,你可以轻松地在你的 Java 应用程序中进行 JSON 数据的处理,这在与 Web 服务、前端交互、数据存储等方面非常常见。Jackson 的广泛应用使其成为 Java 生态系统中处理 JSON 的首选库之一。
# 2.jackson 优点?
Jackson 作为 Java 生态系统中处理 JSON 数据的主要库之一,具有许多优点,使其受到广泛使用。以下是一些 Jackson 库的主要优点:
性能高效: Jackson 被设计为高性能的 JSON 处理库。它通过使用基于流的处理模型以及一些优化技术,提供了快速的序列化和反序列化性能。
广泛支持: Jackson 提供了对 Java 对象到 JSON 数据的序列化和反序列化的全面支持。它可以处理复杂的 Java 对象图,包括嵌套和循环引用等情况。
灵活性: Jackson 提供了许多配置选项和定制功能,使开发人员能够根据其特定需求调整库的行为。这种灵活性使得 Jackson 适用于各种不同的应用场景。
支持 JSON 树模型: Jackson 的 jackson-core 模块支持 JSON 树模型,使开发人员可以以树的形式访问和操作 JSON 数据。这对于处理动态或未知结构的 JSON 数据非常有用。
集成广泛: Jackson 被广泛集成到许多 Java 框架和库中,包括 Spring、JAX-RS、Hibernate 等。这种集成使得在这些框架中使用 Jackson 变得非常简单。
开源和活跃的社区: Jackson 是一个开源项目,拥有活跃的社区支持。这意味着它不断得到更新、改进,并且有大量的文档和示例可用于帮助开发人员更好地使用它。
Jackson 是一个功能强大、高效且灵活的 JSON 处理库,适用于各种 Java 应用程序。
# 二.jackson 使用
# 1.依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
2
3
4
5
6
7
8
# 2.json 字符串转对象
/**
* 字符串转对象
*
* @throws Exception
*/
@Test
public void test1() throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
Car car = objectMapper.readValue(carJson, Car.class);
System.out.println(objectMapper.writeValueAsString(car));
}
2
3
4
5
6
7
8
9
10
11
12
# 3.对象转 json 字符串
/**
* 对象转字符串
*
* @throws Exception
*/
@Test
public void test2() throws Exception {
Car car = new Car();
car.setBrand("宝马");
car.setDoors(8);
System.out.println(new ObjectMapper().writeValueAsString(car));
}
2
3
4
5
6
7
8
9
10
11
12
# 4.二进制数组转 json 对象
/**
* 二进制数组转对象
*
* @throws Exception
*/
@Test
public void test3() throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
String carJson =
"{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
byte[] bytes = carJson.getBytes("UTF-8");
Car car = objectMapper.readValue(bytes, Car.class);
System.out.println(objectMapper.writeValueAsString(car));
}
2
3
4
5
6
7
8
9
10
11
12
13
14
# 5.json 字符串转 list 集合
/**
* 字符串转lsit
*
* @throws Exception
*/
@Test
public void test4() throws Exception {
String jsonArray = "[{\"brand\":\"ford\"}, {\"brand\":\"Fiat\"}]";
ObjectMapper objectMapper = new ObjectMapper();
List<Car> cars = objectMapper.readValue(jsonArray, new TypeReference<List<Car>>() {
});
System.out.println(objectMapper.writeValueAsString(cars));
}
2
3
4
5
6
7
8
9
10
11
12
13
# 6.list 转 json 字符串
/**
* list转字符串
*
* @throws Exception
*/
@Test
public void test5() throws Exception {
List<Car> cars = new ArrayList<>();
Car car1 = new Car();
car1.setBrand("宝马");
car1.setDoors(8);
cars.add(car1);
Car car2 = new Car();
car2.setBrand("奔驰");
car2.setDoors(10);
cars.add(car2);
System.out.println(new ObjectMapper().writeValueAsString(cars));
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 7.json 字符串转 map
/**
* 字符串转map
*
* @throws Exception
*/
@Test
public void test6() throws Exception {
String jsonObject = "{\"brand\":\"ford\", \"doors\":5}";
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> jsonMap = objectMapper.readValue(jsonObject,
new TypeReference<Map<String, Object>>() {
});
System.out.println(objectMapper.writeValueAsString(jsonMap));
}
2
3
4
5
6
7
8
9
10
11
12
13
14
# 8.可见性配置
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
objectMapper.setVisibility(VisibilityChecker.Std.defaultInstance().withFieldVisibility(JsonAutoDetect.Visibility.ANY));
2
3
这段代码是使用 Jackson 库中的 ObjectMapper 类来配置 JSON 的反序列化行为。
ObjectMapper objectMapper = new ObjectMapper();
:这行代码创建了一个新的 ObjectMapper 实例,它是 Jackson 库中用于处理 JSON 的核心类。ObjectMapper 可以用来序列化(将 Java 对象转换为 JSON 字符串)和反序列化(将 JSON 字符串转换为 Java 对象)。objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
:这行代码调用 ObjectMapper 的disable
方法,禁用了在反序列化过程中对于未知属性的处理。通常情况下,如果 JSON 中包含 Java 对象中未定义的属性,Jackson 会抛出异常。通过禁用这个特性,可以使得 Jackson 在遇到未知属性时不会抛出异常,而是忽略它们。objectMapper.setVisibility(VisibilityChecker.Std.defaultInstance().withFieldVisibility(JsonAutoDetect.Visibility.ANY));
:这行代码设置了 ObjectMapper 的可见性检查器(VisibilityChecker),并将字段的可见性设置为ANY
。这意味着 ObjectMapper 在序列化和反序列化过程中将考虑所有的字段,不论它们是否被声明为私有、受保护或公共。这样设置可以确保 ObjectMapper 能够访问到所有字段,而不仅仅是公共字段。
综合来说,这段代码的作用是创建了一个 ObjectMapper 实例,并对其进行了配置,以确保在反序列化 JSON 字符串时能够忽略未知属性,并且能够访问到所有的字段。
# 三.fastjson 对比
# 1.json 字符串转对象
json字符串转对象
//转对象
Myclass myclass = JSONObject.parseObject(jsonStr , Myclass.class);// jsonStr 是String类型。
//转list对象
List<NewPxtOrder> pxtOrderList = JSONObject.parseArray(order,NewPxtOrder.class);
2
3
4
# 2.fastjson 不能转对象的情况
String redisKey = supplierRelateServiceManager.getRedisKey();
String checkOrderInfo = jedis.get(redisKey);
// SelfOrderModel selfOrderModel = JSONObject.parseObject(checkOrderInfo, SelfOrderModel.class);
// selfOrderModel.setRejectReason(outExamineVo.getRemark());
JSONObject jsonObject = JSONObject.parseObject(checkOrderInfo);
jsonObject.put("rejectReason", outExamineVo.getRemark());
jedis.set(redisKey, jsonObject.toJSONString());
2
3
4
5
6
7
← 04-Maven 06-swagger入门 →