Теперь вы можете визуально извлекать элементы 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
}

Примеры

Как обрабатываются JSONPath

Каждый JSONPath соответствует результирующему столбцу в Lodr. JSONPath может привести к увеличению набора строк в вашем файле, если путь выбирает массив, а не скалярное значение.

Каждый путь должен быть введен через запятую. Все пути оцениваются относительно первого пути. Таким образом, Lodr будет применять следующие правила в зависимости от того, как каждый последующий путь сравнивается с первым:

  • Тот же уровень. Текущий путь одинаков до родительского узла. store.book.category находится на том же уровне, что и store.book.author. Здесь авторы будут добавлены в правильные столбцы, соответствующие категории.
  • Высший уровень. Текущий путь находится на более высоком уровне, чем первый. store.name выше, чем store.book.author. Имя магазина будет повторяться для каждого Автора.
  • Нижний уровень. Текущий путь ниже первого пути. Это приведет к тому, что нижний уровень будет извлечен как объект JSON и повторен для каждой строки, полученной из первого пути.
  • Другой уровень. Текущий путь находится на другой ветке, чем первый путь. Каждый элемент будет извлечен как объект JSON и повторен для каждой строки, полученной из первого пути.

Работа с JSON может быть сложной, поэтому мы создали приятный пользовательский интерфейс, щелкая и просматривая свой путь к успеху!