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

Json.Net:SelectToken获取的JToken直接父节点路径未正确返回

为什么JToken的Parent.Path和自身Path相同?

这不是Bug哦,是Newtonsoft.Json里JToken.Path属性的设计逻辑导致的~

咱们先拆解下你的场景:你用..object这种深度搜索语法定位到了"value"这个JValue节点,它的直接父节点其实是JProperty类型的"object"键值对,而不是你以为的parent对象。而JProperty的Path属性设计就是返回它自身的完整路径(包含键名),所以才会和子节点JValue的Path完全一致。

正确获取父对象路径的方法

要拿到真正的parent对象的路径,你需要先判断当前节点的Parent是不是JProperty,如果是的话,再取这个JProperty的Parent,那才是你要的父对象。修改你的代码如下:

var input = "{'grandparent': { 'parent' : {'object' : 'value'}}}";
var jsonInput = JObject.Parse(input);
var jsonObject = jsonInput.SelectToken("..object");

// 处理JProperty的情况,拿到真正的父对象
JToken actualParent = jsonObject.Parent;
if (actualParent is JProperty property)
{
    actualParent = property.Parent;
}

var realParentPath = actualParent.Path; // 此时返回 "grandparent.parent"

补充说明

在JSON的结构模型里,键值对是被封装成JProperty的:

  • JValue("value")的直接父是JProperty("object": "value")
  • JProperty的父才是JObject(parent对象)

而JProperty的Path会包含它的键名,所以才会出现你看到的parent.Path和object.Path相同的情况,这是设计逻辑,不是Bug哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:23:32