You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:01:03