JsonNode.at(JsonPointer)使用相对路径还是绝对路径?
关于Jackson JsonNode.at()方法的路径解析逻辑
首先明确核心结论:Jackson的JsonNode.at()方法是基于调用该方法的节点作为起点来解析路径,而非整个JSON文档的根节点,这和你之前认为"JsonPointer是绝对路径"的认知存在偏差,具体解释如下:
路径解析的实际规则
虽然JsonPointer规范定义的是从文档根开始的绝对路径,但Jackson对at()方法的实现做了适配:无论传入的JsonPointer是否以/开头,都会被当作相对当前调用节点的路径来处理。结合你的例子验证
给定JSON结构:{ "parent": { "child": "foobar" } }- 若在
child节点调用at("/parent"):由于child是字符串叶子节点,没有名为parent的子节点,会返回MissingNode(找不到对应节点),而非根节点下的parent节点。 - 若在
child节点调用at(".."):会返回它的父节点parent(Jackson内部通过路径解析逻辑处理相对父节点的跳转,无需JsonNode持有父引用)。 - 若在
child节点调用at("/"):会返回当前child节点本身(因为以/开头的路径在当前节点下,代表从当前节点的"根"——也就是自身——开始)。
- 若在
绝对路径的正确使用方式
如果需要基于整个文档的根节点使用绝对路径,必须从根JsonNode对象调用at()方法,此时传入的JsonPointer才会按文档根的绝对路径解析。
内容的提问来源于stack exchange,提问作者Gili
相关产品推荐
相关产品推荐

