этот ответ
ользую Json.Net от Newtonsoft для выбора узлов из следующих json:
{
"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/ и, кажется, мой синтаксис запроса действительно нарушен.
Используя реализацию Flow Communications JSONPath 0.3.4 (по ссылке выше), я могу получить клиент, используя
$..[?(@.code == 'DEF')]
тем не менее, этот синтаксис кажется недопустимым для Json.Net (или реализации Goessner на той же странице).
Кто-нибудь видит, что я делаю не так?