使用 Json.NET 选择特定对象 (选择令牌)



我是 Json.NET 新手,并尝试使用SelectToken函数。

我的测试 JSON:

{
  "Root": {
    "aNode": {
      "bNode": {
        "cNode": {
          "id": "myID1"
        }
      },
      "cNode": {
        "id": "myID2"
      },
      "dNode": {
        "cNode": [
          {
            "id": "myID3"
          },
          {
            "id": "myID4"
          }
        ]
      }
    },
    "cNode": {
      "id": "myID5"
    }
  }
}

现在,我尝试使用以下代码来获取特定对象:

JObject obj = JsonConvert.DeserializeObject<JObject>(jsonTxt);
//Not found
var myID1 = obj.SelectToken("..cNode[?(@.id=='myID1')]");
//Not found
var myID2 = obj.SelectToken("..cNode[?(@.id=='myID2')]");
//Found
var myID3 = obj.SelectToken("..cNode[?(@.id=='myID3')]");
//Found
var myID4 = obj.SelectToken("..cNode[?(@.id=='myID4')]");
//Not found
var myID5 = obj.SelectToken("..cNode[?(@.id=='myID5')]");

为什么我得到这些(对我来说)奇怪的结果?

我认为我应该在每种情况下都获得具有特定 ID 的 cNode 对象,而不仅仅是 myID3myID4 .这是怎么回事?

我不确定你真正想要实现什么,但你可以使用 Linq 来获取 cNode

var nodes = obj.Descendants()
                .OfType<JProperty>()
                .Where(p => p.Name == "id")
                .Select(p=>p.Parent)
                .ToList();

相关内容

  • 没有找到相关文章

最新更新