我使用Newtonsoft的Json.Net选择从以下JSON节点:Json.NET JSONPath查询没有返回预期的结果
{
"projects":[
{
"name":"Project 1",
"client":{
"code":"ABC",
"name":"Client 1"
}
},
{
"name":"Project 2",
"client":{
"code":"DEF",
"name":"Client 2"
}
},
{
"name":"Project 3",
"client":{
"code":"GHI",
"name":"Client 3"
}
}
]
}
下面的C#代码段
//json is a JObject representation of the json listed above
var clients = json.SelectTokens("$.projects[*].client");
产量:
[
{
"code":"ABC",
"name":"Client 1"
},
{
"code":"DEF",
"name":"Client 2"
},
{
"code":"GHI",
"name":"Client 3"
}
]
这很酷,现在,我想要做的是按客户端代码过滤,我会认为
$.projects[*].client[?(@.code == 'DEF')]
会工作,但我明显不理解语法。这将返回一个空列表:
var test1 = json.SelectTokens("$.projects[*].client[?(@.code == 'DEF')]").ToList();
和单个令牌选择返回一个空:
var test2 = json.SelectToken("$.projects[*].client[?(@.code == 'DEF')]");
我试过https://jsonpath.curiousconcept.com/几种不同的配置,它似乎我的查询语法确实打破。
使用流动通讯JSONPath 0.3.4执行(以上链接),我可以使用
$..[?(@.code == 'DEF')]
但得到的客户端,这句法似乎并不适用于Json.Net(也没有对Goessner实施相同的页面)。
有人看到我在做什么错了吗?
你可以尝试交换jayway的实现,这将工作。 https://github.com/json-path/JsonPath –