gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:04 25 4
gpt4 key购买 nike

query 的答案2009 年发布的是使用新功能 JObject.SelectToken,它应该提供类似 XPath 的功能。我现在使用的是 JSON.NET 4.5 R11,SelectToken 方法可用。

但是我找不到很多关于要传递给 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 参数的语法是什么?如何选择 Name=”Name1”employees 的所有 EmpId

Edit1:如果 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')]");

有关 blog post 的更多详细信息

关于c# - Json.net:JObject.SelectToken 可以做 XPath 可以做的事情吗?如果是,语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13780097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com