Jackson Json工具的使用总结

Jackson的主要模块

  1. Streaming  jackson-core 定义了低级流式处理 API,并包括特定于 JSON 的实现
  2. Annotations jackson-annotations 包含标准的 Jackson 注释
  3. Databind jackson-databind 实现数据绑定,依赖于streaming和Annotations

使用例子

1. 在缓存中序列化和反序列化

在缓存的场景下,在反序列化时,需要创建与序列化时相同的类对象。 这种情况下需要在序列化时写入对象的类型信息。
进行如下配置:

		ObjectMapper objectMapper = new ObjectMapper();
		objectMapper.activateDefaultTyping(BasicPolymorphicTypeValidator
				.builder()
				.allowIfBaseType(Object.class)
				.build(), ObjectMapper.DefaultTyping.NON_FINAL);

序列化后的数据中带有类型信息

2. JsonNode获取

        String json = "{\"a\": 1, \"b\":{\"c\":2}}";
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode node = objectMapper.readTree(json);
        System.out.println(node.path("b").path("d").asText(""));//不会报空指针
        System.out.println(node.path("b").path("c").asText(""));

从JsonNode获取节点时有2种情况:

  1. node不存在,get方法返回null,path方法会返回MissingNode;
  2. 节点的值为null,此时会返回一个NullNode
    使用path而不是get方法可以避免NPE

3. JsonProperty的使用

标记注解可用于将非静态方法定义为逻辑属性访问器的“setter”或“getter”(取决于其签名),或者将非静态对象字段定义为逻辑属性(用于赋值或获取值)(序列化、反序列化)。

主要属性:

  1. value()
    定义逻辑字段名
  2. access()
    修改getter、setter、字段的可见性
    • AUTO 自动
    • READ_ONLY 只读,只用于序列化,不用于反序列化
    • WRITE_ONLY 只写,只用于反序列化,不用于序列化
    • READ_WRITE 读和写

使用例子:

在get方法上使用,但这个属性没有对应的set方法,需用指定为Access.READ_ONLY,否则该实体列在反序列化是会报错(默认配置的情况下)

    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    public Map<String, Boolean> getPermissionMap() {
        if (this.permissions == null || this.permissions.isEmpty()) {
            return Collections.emptyMap();
        }
        Map<String, Boolean> map = new HashMap<>(this.permissions.size(), 1.0f);
        for (String permission : this.permissions) {
            map.put(permission, true);
        }
        return map;
    }
posted @ 2025-11-13 17:29  Hekk丶  阅读(14)  评论(0)    收藏  举报