Я пытаюсь создать JSON фильтрацию в одном из моих проектов, и здесь JSON будет динамическим c, поэтому не могу создать модель, и фильтр будет получен от пользователя, мой образец JSON равен
[
{
"id": 101,
"field1": "f1",
"field2": "f2",
"InnerArray": [
{
"id": 201,
"innerField1": "f1",
"innerField2": "f2"
},
{
"id": 202,
"innerField1": "f1",
"innerField2": "f2"
}
]
},
{
"id": 102,
"field1": "ff1",
"field2": "ff2",
"InnerArray": [
{
"id": 301,
"innerField1": "f1",
"innerField2": "f2"
},
{
"id": 302,
"innerField1": "f1",
"innerField2": "f2"
}
]
}
]
Я пытаюсь отфильтровать это по SelectToken (), и это будет работать нормально, за исключением внутреннего массива, например, если запрос
string filter = "$.[?(@.id==101)]";
JToken filteredData = data.SelectToken($"{filter}");
//We will get
{
"id": 101,
"field1": "f1",
"field2": "f2",
"InnerArray": [
{
"id": 201,
"innerField1": "f1",
"innerField2": "f2"
},
{
"id": 202,
"innerField1": "f1",
"innerField2": "f2"
}
]
}
, но если я хочу отфильтровать JSOn по внутреннему элементу массива он не будет работать
string filter = "$.[?(@.InnerArray[?(@.id==301)])]";
JToken filteredData = data.SelectToken($"{filter}");
//Result is
{
"id": 102,
"field1": "ff1",
"field2": "ff2",
"InnerArray": [
{
"id": 301,
"innerField1": "f1",
"innerField2": "f2"
},
{
"id": 302,
"innerField1": "f1",
"innerField2": "f2"
}
]
}
Я ожидаю
{
"id": 102,
"field1": "ff1",
"field2": "ff2",
"InnerArray": [
{
"id": 301,
"innerField1": "f1",
"innerField2": "f2"
}
]
}
Фильтр InnerArray, возвращающий все элементы, а внутренний JSON PATH не принимает, есть ли альтернативный способ определить JSON путь? или есть какая-либо альтернатива для динамической фильтрации JSON, поскольку здесь JSON будет динамически c, а фильтр будет динамически c