У меня есть требование, когда я пытаюсь выбрать объекты внутри строки JSON путем фильтрации по присутствию, содержащему значения свойств объектов внутри массива JSON. Вот пример моего массива JSON:
var Json_String = [{
'Identifier': 1,
'CustomerId': 1,
'AccountType': 'Saving Account',
'AccountNumber': 'ACC-345678',
'TransactionDate': '22-09-2020',
'Narration': 'NXT TXN: RENT FDR SEP2020'
},
{
'Identifier': 2,
'CustomerId': 1,
'AccountType': 'Current Account',
'AccountNumber': 'ACC-56432',
'TransactionDate': '23-09-2020',
'Narration': 'NXT TXN: Depreciation expense'
}]
Я хочу найти объект JSON, используя ключевое слово Contains, например:
Я уже пробовал использовать следующий запрос:
var res = Json_String.Where(it => it.Value["AccountType"].ToString().Contains("Saving")).ToList();
Вышеупомянутый запрос дает мне точный результат, который я хочу. Но в моем случае ключ фильтра, критерии фильтра и значение фильтра должны быть динамическими, а это означает, что я не знаю, какое значение и условие фильтра должны поступать во время выполнения фильтрации. например У меня ниже критерии фильтра формата в формате массива JSON, которые определяются пользователем.
[{
"FieldId": "14",
"Operator": "Contains",
"ConditionalOperator": null,
"Sequence": 1,
"Value": "Saving",
"OperatorName": "Contains",
"FieldName": "AccountType"
}, {
"FieldId": "15",
"Operator": "GreaterThan",
"ConditionalOperator": "AND",
"Sequence": 2,
"Value": "01/09/2020",
"OperatorName": "GreaterThan",
"FieldName": "TransactionDate"
}]
Итак, я хочу создать динамический запрос JsonPath с более чем одним условием, используя указанный выше критерий фильтра формата JSON-массив для поиска записей.
Мне нужен ответ на С #. На данный момент. Я попытался использовать NewtonSoft.Json SelectToken для выбора токена с помощью запроса JSONPath.
var res = Json_String.SelectTokens("$.[?(@.AccountType=='Saving Account')]").ToList();
Вышеупомянутый запрос JSONPath также предоставляет мне данные путем фильтрации из моего фактического массива строк JSON. Но когда я пытался фильтровать данные с использованием ключевых слов, это не дало мне результата.
var res = Json_String.SelectTokens("$.[?(@.AccountType.Contains('Saving'))]").ToList();
Мне нужен синтаксис оператора ключевого слова Contains. Любые предложения были бы полезны.
Contains
в выражении JsonPath. Однако, начиная с версии 11.0.1, он поддерживает регулярные выражения в JsonPath, поэтому вы можете использовать этот подход для выполнения своего запроса. См. JSON.NET - найти JObject по регулярному выражению значения в сложном объекте? - person Brian Rogers   schedule 08.12.2020