Json.net:可以JObject.SelectToken能做XPath能做的事情吗?如果是,语法是什么



2009年发布的查询的答案是使用一个新功能JObject.SelectToken,该功能应该提供类似XPath的功能。我现在正在使用JSON。NET 4.5 R11和CCD_ 3方法。

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

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

IList branches = new ArrayList();
IList employees = new ArrayList();
employees.Add(new { EmpId = 1, Name = "Name1" });
employees.Add(new { EmpId = 2, Name = "Name2" });
employees.Add(new { EmpId = 3, Name = "Name3" });
IList employees2 = new ArrayList();
employees2.Add(new { EmpId = 4, Name = "Name1" });
employees2.Add(new { EmpId = 5, Name = "Name5" });
branches.Add(new { BranchName = "Branch1", Employees = employees });
branches.Add(new { BranchName = "Branch2", Employees = employees });
string json = JsonConvert.SerializeObject(branches);
var branchesDeserialised = JsonConvert.DeserializeAnonymousType(json, new[] { new { BranchName = "", Employees = new[] { new { EmpId = 0, Name = "" } } } });
JArray ja = JArray.Parse(json);
var AllName1Tokens = ja.SelectToken(@"..Name=""Name1"""); //Get all names that are having Name = "Name1" irrespective of branch

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

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

Edit1:如果SelectToken不能做到这一点,是否可以在JSON字符串上(而不是在真实对象上)使用JObject.Select(LINQ查询)来获得结果?regex呢?

来自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')]");

博客文章上的更多详细信息

Can JObject。SelectToken能做XPath能做的事情吗?

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

我相信它只支持到单个令牌(如"branches[0].employees[0].name")的字符串路径

如何选择Name="Name1"的所有员工的EmpId?

我不确定SelectToken能否做到这一点,而且您的问题的限制排除了大多数常见的解决方案。

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

此处的一些文档:

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

相关内容

  • 没有找到相关文章

最新更新