История страницы
...
Свойство | Описание | Тип | Пример | Обязательность |
|---|---|---|---|---|
| Параметры | ||||
| Исходный JSON | Текст в формате JSON, из которого необходимо извлечь данные. Должен быть валидным JSON-документом. Пустая строка или невалидный JSON вызовут ошибку валидации. | JSON | { "id": 67890, "name": "Рик Санчез", "email": "rick@examplerick@example.com", "isActive": true, "subscriptions": ["web", "mobile"] } | Да |
| JSONPath | Выражение JSONPath для указания узлов, из которых необходимо извлечь данные (например, $.items[?(@.price > 100)]). Поддерживает стандартный синтаксис JSONPath (Newtonsoft.Json). Оператор contains не поддерживается; используйте [*] == для массивов и =~ для строк. | Строка | $.isActive | Да |
| Результаты | ||||
Результат | Извлеченное значение. Если путь указывает на один элемент — возвращается сам элемент (скаляр, объект, массив). Если путь выбирает несколько элементов (через фильтр, срез или wildcard) — возвращается массив найденных элементов. | JSON | true | - |
Особые условия использования
Примеры корректных выражений JSONPath
| Сценарий | Желаемый синтаксис (не работает) | Рабочий синтаксис (Newtonsoft.Json) | Пояснение |
|---|---|---|---|
| Поиск элемента в массиве (Есть ли значение "sale" в массиве тегов?) | $.items[?(@.tags contains 'sale')] | $.items[?(@.tags[*] == 'sale')] | Используем wildcard [*] внутри массива tags, чтобы проверить каждый элемент на равенство. |
| Поиск подстроки в тексте (Содержит ли имя слово "phone"?) | $.items[?(@.name contains 'phone')] | $.items[?(@.name =~ /phone/)] | Оператор =~ запускает проверку регулярным выражением. По умолчанию регистрозависим, для игнорирования регистра используйте /phone/i. |
| Поиск подстроки с игнорированием регистра | $.items[?(@.name contains 'phone')] | $.items[?(@.name =~ /phone/i)] | Флаг i в конце регулярного выражения делает поиск нечувствительным к регистру. |
| Сложное условие: массив И строка (Тег "new" И имя содержит "book") | $.items[?(@.tags contains 'new' && @.title contains 'book')] | $.items[?(@.tags[*] == 'new' && @.title =~ /book/)] | Комбинируем оба подхода внутри одного фильтра через оператор &&. |
| Отрицание: массив НЕ содержит (Нет тега "archive") | $.items[?(!(@.tags contains 'archive'))] | $.items[?(!(@.tags[*] == 'archive'))] | Отрицание ! применяется к результату проверки равенства внутри массива. |
| Поиск числа в массиве чисел (Есть ли цена 100 в списке цен?) | $.orders[?(@.prices contains 100)] | $.orders[?(@.prices[*] == 100)] | Для чисел используется обычное сравнение ==, кавычки не нужны. |
Исключения
| Исключение | Событие | Описание ошибки в логе |
|---|---|---|
| Robin.Exception.ValidationError | Входная строка параметра «Исходный JSON» не является корректным JSON-документом. | Обрабатываемый JSON некорректен. |
| Robin.Exception.ValidationError | Выражение в параметре «JSONPath» содержит синтаксическую ошибку (незакрытая скобка, неверный оператор, использование неподдерживаемого ключевого слова contains). | JSONPath содержит синтаксическую ошибку: <текст исключения от библиотеки-парсера> |
| Robin.Exception.ValidationError | Ошибка компиляции регулярного выражения в фильтре JSONPath (некорректный паттерн в операторе =~). | Некорректное регулярное выражение в JSONPath: <текст ошибки> |
| Robin.Exception.JSONException | Критическая ошибка внутреннего движка (например, переполнение стека при рекурсивном спуске .. на глубокой структуре). | Внутренняя ошибка обработки JSONPath: <текст ошибки> |
| Robin.Exception.ElementNotFound | Выражение JSONPath синтаксически верно, но не нашло ни одного совпадения в документе (пустой результат). | Элементы по пути не найдены. |
Изменения в версии
- Параметр «JSONPath» теперь принимает на вход JSONPath, а не JSON Pointer.