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

Java使用JSONPatch更新JSON字段时路径/被转义为~1如何解决?

问题根因

你遇到的转义异常本质是JsonPointer.of()方法的用法错误:
当你给of()方法传入完整的"/config/version"字符串时,该方法会把整个字符串识别为单个JSON属性名,而非由/分隔的多级路径,因此会自动将属性名中包含的/统一转义为~1,最终生成错误的/~1config~1version路径。
你手动把/替换为~1后再传入of()方法,方法又会把你手动加的~转义为~0,自然就出现了/~01config~01version的二次转义问题。

解决方案

有两种常用的正确写法可选:

方法1:传入路径分段参数

JsonPointer.of()方法支持传入多级路径的分段字符串,不需要加前缀/,方法会自动拼接为合法JSON Pointer:

// 对应路径 /config/version
JsonPointer versionPointer = JsonPointer.of("config", "version");

JsonPatch jsonPatch = new JsonPatch(
    Arrays.asList(               
        new ReplaceOperation(versionPointer, new TextNode("436_605_83.0.0"))
    )
);

方法2:调用路径字符串解析方法

如果要直接传入带/的完整路径字符串,不要用of()方法,改用对应库的路径解析方法:

  • 如果用的是javax.json官方API:调用JsonPointer.createPointer("/config/version")
  • 如果用的是fasterxml.jackson的JsonPointer实现:调用JsonPointer.compile("/config/version")
// 以jackson实现为例
JsonPointer versionPointer = JsonPointer.compile("/config/version");
JsonPatch jsonPatch = new JsonPatch(
    Arrays.asList(               
        new ReplaceOperation(versionPointer, new TextNode("436_605_83.0.0"))
    )
);

两种写法最终生成的JSON Patch都符合预期:

[{"op":"replace","path":"/config/version","value":"436_605_83.0.0"}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 12:09:03