Jackson-02

举报
kwan的解忧杂货铺 发表于 2024/10/10 22:32:51 2024/10/10
【摘要】 1.依赖<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId>...

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.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));
}

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));
}

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));
}

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));
}

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));
}

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));
}

8.可见性配置

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
objectMapper.setVisibility(VisibilityChecker.Std.defaultInstance().withFieldVisibility(JsonAutoDetect.Visibility.ANY));

这段代码是使用 Jackson 库中的 ObjectMapper 类来配置 JSON 的反序列化行为。

  1. ObjectMapper objectMapper = new ObjectMapper();:这行代码创建了一个新的 ObjectMapper 实例,它是 Jackson 库中用于处理 JSON 的核心类。ObjectMapper 可以用来序列化(将 Java 对象转换为 JSON 字符串)和反序列化(将 JSON 字符串转换为 Java 对象)。

  2. objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);:这行代码调用 ObjectMapper 的 disable 方法,禁用了在反序列化过程中对于未知属性的处理。通常情况下,如果 JSON 中包含 Java 对象中未定义的属性,Jackson 会抛出异常。通过禁用这个特性,可以使得 Jackson 在遇到未知属性时不会抛出异常,而是忽略它们。

  3. objectMapper.setVisibility(VisibilityChecker.Std.defaultInstance().withFieldVisibility(JsonAutoDetect.Visibility.ANY));:这行代码设置了 ObjectMapper 的可见性检查器(VisibilityChecker),并将字段的可见性设置为 ANY。这意味着 ObjectMapper 在序列化和反序列化过程中将考虑所有的字段,不论它们是否被声明为私有、受保护或公共。这样设置可以确保 ObjectMapper 能够访问到所有字段,而不仅仅是公共字段。

综合来说,这段代码的作用是创建了一个 ObjectMapper 实例,并对其进行了配置,以确保在反序列化 JSON 字符串时能够忽略未知属性,并且能够访问到所有的字段。

Jackson 是一个开源的 Java 库,用于处理 JSON 数据格式的序列化和反序列化。它被广泛认为是 Java 中最好的 JSON 解析器,也常被称为"JSON for Java"。Jackson 提供了一套数据绑定工具,能够将 Java 对象转换成 JSON 数据,或者将 JSON 数据转换成 Java 对象。此外,Jackson 还支持其他数据格式,如 XML、CSV、Avro 等

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。