问题描述
我有一个深度嵌套的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 (将#修改为@)