key*_*eyr 6 c# regex xml xpath json.net
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
Run Code Online (Sandbox Code Playgroud)
由于我没有类的二进制文件和Json字符串的结构是如此巨大,以至于很难使用动态.因此,在反序列化后无法在对象上使用LINQ.我不想将Json字符串转换为XML或其他格式来进行选择.另外我不想编写代码来解析它.
函数Path
参数的语法是什么SelectToken
?我该如何选择所有EmpId
的employees
地方Name=”Name1”
?
Edit1:是否有可能JObject.Select
在JSON字符串(而不是真实对象)上使用(LINQ查询)获取结果,以防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')]");
Run Code Online (Sandbox Code Playgroud)
博客文章中有更多详细信息
归档时间: |
|
查看次数: |
6147 次 |
最近记录: |