如何更新嵌套JsonObject中的expiryDate.value属性?
解决嵌套JSON属性更新问题
你的问题在于目前的代码直接对顶层ObjectNode调用put,所以只能添加新的顶层属性。要更新嵌套的expiryDate.value,得先获取到expiryDate对应的子节点(它本身也是一个ObjectNode),再对这个子节点进行修改。
下面是修正后的完整代码示例:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import java.text.SimpleDateFormat; import java.util.Date; public class UpdateNestedJson { public static void main(String[] args) throws Exception { String dataString = "{ \"expiryDate\" : { \"type\" : \"String\", \"value\" : \"31-12-2019\" } }"; ObjectMapper objectMapper = new ObjectMapper(); // 读取JSON字符串为JsonNode JsonNode data = objectMapper.readTree(dataString); // 将顶层只读JsonNode转为可修改的ObjectNode ObjectNode rootNode = (ObjectNode) data; // 获取expiryDate子节点,同样转为可修改的ObjectNode ObjectNode expiryDateNode = (ObjectNode) rootNode.get("expiryDate"); // 生成符合格式的当前日期(dd-MM-yyyy) SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); String currentDate = sdf.format(new Date()); // 直接更新嵌套的value属性 expiryDateNode.put("value", currentDate); // 输出修改后的JSON,验证结果 System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data)); } }
关键细节说明:
JsonNode本身是只读的,必须转为ObjectNode才能执行修改操作,不管是顶层节点还是子节点都要做转换- 先定位到嵌套的
expiryDate节点,再对它的value字段执行put,这才是修改嵌套属性的正确姿势 - 如果是Java 8及以上版本,更推荐用线程安全的
DateTimeFormatter处理日期:import java.time.LocalDate; import java.time.format.DateTimeFormatter; // 替换日期生成部分的代码 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); String currentDate = LocalDate.now().format(formatter);
这样就能成功把嵌套的expiryDate.value更新为当前日期了!
内容的提问来源于stack exchange,提问作者Karen
相关产品推荐
相关产品推荐

