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

JsonNode.at(JsonPointer)使用相对路径还是绝对路径?

关于Jackson JsonNode.at()方法的路径解析逻辑

首先明确核心结论:Jackson的JsonNode.at()方法是基于调用该方法的节点作为起点来解析路径,而非整个JSON文档的根节点,这和你之前认为"JsonPointer是绝对路径"的认知存在偏差,具体解释如下:

  1. 路径解析的实际规则
    虽然JsonPointer规范定义的是从文档根开始的绝对路径,但Jackson对at()方法的实现做了适配:无论传入的JsonPointer是否以/开头,都会被当作相对当前调用节点的路径来处理。

  2. 结合你的例子验证
    给定JSON结构:

    {
      "parent": {
        "child": "foobar"
      }
    }
    
    • 若在child节点调用at("/parent"):由于child是字符串叶子节点,没有名为parent的子节点,会返回MissingNode(找不到对应节点),而非根节点下的parent节点。
    • 若在child节点调用at(".."):会返回它的父节点parent(Jackson内部通过路径解析逻辑处理相对父节点的跳转,无需JsonNode持有父引用)。
    • 若在child节点调用at("/"):会返回当前child节点本身(因为以/开头的路径在当前节点下,代表从当前节点的"根"——也就是自身——开始)。
  3. 绝对路径的正确使用方式
    如果需要基于整个文档的根节点使用绝对路径,必须从根JsonNode对象调用at()方法,此时传入的JsonPointer才会按文档根的绝对路径解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:22:43