C# Json.net:JObject.SelectToken可以做与XPath相同的事情吗?如果是,语法是什么?

C# Json.net:JObject.SelectToken可以做与XPath相同的事情吗?如果是,语法是什么?,c#,xml,regex,xpath,json.net,C#,Xml,Regex,Xpath,Json.net,2009年发布的问题的答案是使用一个新特性JObject.SelectToken,它应该提供类似于XPath的功能。我现在使用的是JSON.NET 4.5 R11,并且SelectToken方法可用 但是我找不到太多关于传递给SelectToken函数的路径字符串的文档(基本上是语法) 下面的代码生成一个Json字符串,我希望在该字符串上执行类似Xpath的方法(即据我所知SelectToken) 由于我没有类的二进制文件,Json字符串的结构非常庞大,因此很难使用动态。因此,在反序列化后对对象

2009年发布的问题的答案是使用一个新特性
JObject.SelectToken
,它应该提供类似于
XPath
的功能。我现在使用的是JSON.NET 4.5 R11,并且
SelectToken
方法可用

但是我找不到太多关于传递给
SelectToken
函数的路径字符串的文档(基本上是语法)

下面的代码生成一个Json字符串,我希望在该字符串上执行类似Xpath的方法(即据我所知
SelectToken

由于我没有类的二进制文件,Json字符串的结构非常庞大,因此很难使用动态。因此,在反序列化后对对象使用LINQ是不可能的。我也不想将Json字符串转换为XML或其他格式来进行选择。我也不想写代码来解析它

函数的
Path
参数的语法是什么?如何选择
员工的所有
EmpId
,其中
Name=“Name1”

Edit1:是否可以使用
JObject获得结果。如果
SelectToken
无法执行,请在JSON字符串(而不是真实对象)上选择
(LINQ查询)?regex呢

JObject.SelectToken可以做XPath可以做的事情吗

SelectToken函数的Path参数的语法是什么

我相信它只支持单个令牌的字符串路径,如分支[0].employees[0].name“

如何选择Name=“Name1”中的所有EmpId员工

我不确定
SelectToken
是否能做到这一点,并且您的问题的限制排除了最常见的解决方案

我找不到关于 要传递给SelectToken函数的路径字符串

一些文件:

路径由属性名和数组索引组成,它们之间用 时期。数组索引可以使用方括号或圆括号


来自JSON.NET的作者:

由于Json.NET 6.0支持SelectToken并完全支持JSONPath,这是一种类似XPath的Json查询语言

JObject o = JObject.Parse(@"{
  ""Manufacturers"": [
    {
      ""Name"": ""Acme Co"",
      ""Products"": [
        {
          ""Name"": ""Anvil"",
          ""Price"": 50
        }
      ]
    },
    {
      ""Name"": ""Contoso"",
      ""Products"": [
        {
          ""Name"": ""Elbow Grease"",
          ""Price"": 99.95
        },
        {
          ""Name"": ""Headlight Fluid"",
          ""Price"": 4
        }
      ]
    }
  ]
}");

// manufacturer with the name 'Acme Co'
var acme = o.SelectToken("$.Manufacturers[?(@.Name == 'Acme Co')]");

有关

的更多详细信息,感谢文档。我更新了我的问题,提出了另一个问题,即在SelectToken无法执行的情况下,是否可以使用JObject.Select(LINQ查询)在JSON字符串上(而不是在真实对象上)获得结果?或者regex呢?
JObject o = JObject.Parse(@"{
  ""Manufacturers"": [
    {
      ""Name"": ""Acme Co"",
      ""Products"": [
        {
          ""Name"": ""Anvil"",
          ""Price"": 50
        }
      ]
    },
    {
      ""Name"": ""Contoso"",
      ""Products"": [
        {
          ""Name"": ""Elbow Grease"",
          ""Price"": 99.95
        },
        {
          ""Name"": ""Headlight Fluid"",
          ""Price"": 4
        }
      ]
    }
  ]
}");

// manufacturer with the name 'Acme Co'
var acme = o.SelectToken("$.Manufacturers[?(@.Name == 'Acme Co')]");