Теперь вы можете визуально извлекать элементы JSON в пользовательском интерфейсе Lodr. Это можно сделать, щелкнув соответствующие узлы или введя выражения JSONPath.
Этот документ будет посвящен синтаксису пользовательских выражений.
Это частично скопировано с https://github.com/json-path/JsonPath. Ниже мы приводим только полностью протестированные примеры.
Операторы JSONPath
$
Корневой элемент для запроса. Это запускает все выражения пути.@
Текущий узел обрабатывается предикатом фильтра.*
Подстановочный знак. Доступно везде, где требуется имя или число...
Глубокое сканирование. Доступно везде, где требуется имя..<name>
Помеченный точками дочерний элемент['<name>' (, '<name>')]
Обозначенный скобками дочерний элемент или дочерние элементы[<number> (, <number>)]
Индекс массива или индексы[start:end]
Оператор среза массива[?(<expression>)]
Выражение фильтра. Выражение должно оцениваться как логическое значение.
Функции JSONPath
min()
Показывает минимальное значение массиваnumbersDoublemax()
Предоставляет максимальное значение массиваnumbersDoubleavg()
Предоставляет среднее значение массиваnumbersDoublestddev()
Предоставляет значение стандартного отклонения массиваnumbersDoublelength()
Предоставляет длину массиваInteger
Операторы фильтра
Фильтры — это логические выражения, используемые для фильтрации массивов. Типичным фильтром будет [?(@.age > 18)]
, где @
представляет текущий обрабатываемый элемент. Более сложные фильтры можно создавать с помощью логических операторов &&
и ||
. Строковые литералы должны быть заключены в одинарные или двойные кавычки ([?(@.color == 'blue')]
или [?(@.color == "blue")]
).
==
слева равно справа (обратите внимание, что 1 не равно «1»)!=
слева не равно справа<
слева меньше, чем справа<=
слева меньше или равно справа>
слева больше, чем справа>=
слева больше или равно справа=~
left соответствует регулярному выражению [?(@.name =~ /foo.*?/i)]in
левый существует в правом [?(@.size в ['S', 'M'])]nin
слева не существует справаsize
размер левого (массив или строка) должен совпадать с правымпустым левый (массив или строка) должен быть пустым
Примеры пути
Учитывая json
{ "store": { "location": "washington dc", "name": "my store name", "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95, "publishers": [ { "name": "Pinewoods", "publish_date": "2017-08-09", "edition": "1st" }, { "name": "Hearst", "publish_date": "2017-09-01", "edition": "1st" } ] }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99, "publishers": [ { "name": "Pinewoods", "publish_date": "2017-08-09", "edition": "1st" }, { "name": "Hearst", "publish_date": "2017-09-01", "edition": "1st" } ] } ], "bicycle": { "color": "red", "price": 19.95 } }, "expensive": 10 }
Примеры
- $.store.book[*].author Авторы всех книг
- $..автор Все авторы
- $.store.* Все вещи, и книги, и велосипеды
- $.store..price Цена всего
- $..book[2] Третья книга
$..book[-2]
Предпоследняя книга$..book[0,1]
Первые две книги$..book[:2]
Все книги от индекса 0 (включительно) до индекса 2 (эксклюзивно)$..book[1:2]
Все книги от индекса 1 (включительно) до индекса 2 (эксклюзивно)$..book[-2:]
Последние две книги$..book[2:]
Книга номер два из хвоста$..book[?(@.isbn)]
Все книги с номером ISBN$.store.book[?(@.price < 10)]
Все книги в магазине дешевле 10$..book[?(@.price <= $[‘expensive’])]
Все недорогие книги в магазине$..book[?(@.author =~ /.*REES/i)]
Все книги, соответствующие регулярному выражению (без учета регистра)$..*
Дай мне все$..book.length()
Количество книг
Как обрабатываются JSONPath
Каждый JSONPath соответствует результирующему столбцу в Lodr. JSONPath может привести к увеличению набора строк в вашем файле, если путь выбирает массив, а не скалярное значение.
Каждый путь должен быть введен через запятую. Все пути оцениваются относительно первого пути. Таким образом, Lodr будет применять следующие правила в зависимости от того, как каждый последующий путь сравнивается с первым:
- Тот же уровень. Текущий путь одинаков до родительского узла.
store.book.category
находится на том же уровне, что иstore.book.author.
Здесь авторы будут добавлены в правильные столбцы, соответствующие категории. - Высший уровень. Текущий путь находится на более высоком уровне, чем первый.
store.name
выше, чемstore.book.author.
Имя магазина будет повторяться для каждого Автора. - Нижний уровень. Текущий путь ниже первого пути. Это приведет к тому, что нижний уровень будет извлечен как объект JSON и повторен для каждой строки, полученной из первого пути.
- Другой уровень. Текущий путь находится на другой ветке, чем первый путь. Каждый элемент будет извлечен как объект JSON и повторен для каждой строки, полученной из первого пути.
Работа с JSON может быть сложной, поэтому мы создали приятный пользовательский интерфейс, щелкая и просматривая свой путь к успеху!