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

如何通过路径字符串修改Jackson JsonNode/ObjectNode的深层值?

使用路径字符串直接修改Jackson JsonNode/ObjectNode的深层值

当然可以实现这种便捷的路径式修改,Jackson本身就提供了对应的工具类,不需要手动遍历JSON树。

原生Jackson方案:JsonPointer + ObjectNode

Jackson的JsonPointer专门用来处理JSON的路径定位,配合可变的ObjectNode,可以直接通过路径字符串修改深层值,无需逐层调用get()。

代码示例

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.core.JsonPointer;

public class JsonPathUpdateDemo {
    public static void main(String[] args) throws Exception {
        // 原始JSON字符串
        String originalJson = "{\"deep\":{\"path\":{\"to\":\"value\"}}}";
        ObjectMapper mapper = new ObjectMapper();
        
        // 解析为JsonNode,再转为可变的ObjectNode(JsonNode本身不可变)
        JsonNode rootNode = mapper.readTree(originalJson);
        ObjectNode rootObject = (ObjectNode) rootNode;
        
        // 用路径创建JsonPointer,格式为"/deep/path/to"
        JsonPointer pathPointer = JsonPointer.compile("/deep/path/to");
        // 直接设置新值
        rootObject.set(pathPointer, mapper.valueToTree("otherValue"));
        
        // 输出修改后的JSON
        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootObject));
    }
}

封装成你想要的便捷写法

如果你习惯用deep/path/to这种不带前置斜杠的路径格式,可以自己封装一个工具方法,简化调用:

/**
 * 便捷修改ObjectNode深层值
 * @param node 要修改的ObjectNode根节点
 * @param path 路径字符串,如"deep/path/to"
 * @param value 要设置的新值
 * @param mapper ObjectMapper实例
 */
public static void put(ObjectNode node, String path, Object value, ObjectMapper mapper) {
    // 转换为JsonPointer要求的格式:前置加斜杠
    String pointerPath = "/" + path;
    JsonPointer pointer = JsonPointer.compile(pointerPath);
    node.set(pointer, mapper.valueToTree(value));
}

// 调用示例
put(rootObject, "deep/path/to", "otherValue", mapper);

注意事项

  • JsonNode不可变:必须将解析后的JsonNode转为ObjectNode才能进行修改操作,因为基础的JsonNode是只读的。
  • 路径格式适配:如果习惯用其他分隔符(比如.),可以在工具方法里做替换,比如把deep.path.to转成/deep/path/to再创建JsonPointer。

内容的提问来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:15:17