在没有POJO包装器的情况下将对象放入JsonNode

问题描述

我有一个深度嵌套的JsonNode,并且在其中一个嵌套节点上,我想将该值设置为Object(此处为LocalDate对象)。我知道要在json节点中放置一些值,我们需要将其转换为ObjectNode,然后使用set()和put()方法。

这是示例代码,用于演示问题陈述和我的方法。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.JsonNodeType;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

import java.time.LocalDate;
import java.time.ZonedDateTime;

public class LocalDateToJsonNode {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
        LocalDate localDate = ZonedDateTime.now().toLocalDate();

        System.out.println(localDate);

        String jsonString = "{\"dateToSet\":\"\"}";
        JsonNode jsonNode = objectMapper.readValue(jsonString,JsonNode.class);

        ObjectNode objectNode = (ObjectNode) jsonNode;
        objectNode.putPOJO("dateToSet",localDate);

        ObjectNode objectNode2 = objectNode.deepCopy();
        objectNode2.set("dateToSet",objectMapper.convertValue(localDate,JsonNode.class));

        JsonNodeType typ1 = objectNode.get("dateToSet").getNodeType();

        JsonNodeType typ2 = objectNode2.get("dateToSet").getNodeType();

        System.out.println(typ1);
        System.out.println(typ2);
    }
}

上述代码的输出为:

2020-10-13
POJO
ARRAY

这意味着我用来放置对象的方法是将对象包装到POJONode中。

我希望按原样存储对象,因为稍后我的用例涉及将JsonNode树转换为深层映射Map 。在地图中,最终的地图应如下所示:

{
  "level1": {
    "levelKey1": {
      "key": "value","key2": "value",},"levelKey2": {
      "key3": "value2","dateToSet": "2020-10-13" // This is not string,but a LocalDate object
    }
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...