Усі статті

JSONPath: як шукати дані у JSON без ручного парсингу

JSONPath — це мова запитів для вибірки значень із JSON-документа, за аналогією з тим, як XPath працює для XML. Замість ручного проходу по вкладених об’єктах і масивах у коді, можна одним виразом вказати, які саме дані потрібні.

Базовий синтаксис

Вираз завжди починається з $, що позначає корінь документа. Далі йдуть звернення до полів через крапку ($.user.name) або через квадратні дужки ($['user']['name']), а до елементів масиву — за індексом ($.items[0]).

Вибірка кількох значень одразу

Символ * вибирає всі елементи на певному рівні, а .. — рекурсивний спуск, що знаходить поле на будь-якій глибині вкладеності незалежно від точного шляху. Фільтри у формі [?(@.price < 10)] дозволяють вибирати елементи масиву за умовою, схожою на вираз мовою програмування.

Навіщо це потрібно

  • Швидко перевірити чи витягнути конкретне поле з великої API-відповіді під час налагодження.
  • Написати умову фільтрації логів чи подій у форматі JSON без окремого скрипту.
  • Дістати значення з конфігураційного файлу без написання парсера вручну.

Обмеження

На відміну від XPath, у JSONPath немає єдиного офіційного стандарту — різні бібліотеки й інструменти підтримують дещо різні розширення синтаксису (особливо фільтри). Базовий синтаксис із крапками, дужками та зірочками працює практично скрізь однаково.

Ключі з крапками чи пробілами

Якщо назва поля сама містить крапку, дефіс чи пробіл (наприклад, "user.name" як єдиний ключ, а не вкладеність), запис через крапку $.user.name стане неоднозначним — парсер прочитає це як вкладені поля user і name. У таких випадках ключ обов’язково беруть у квадратні дужки з лапками: $['user.name'].

Спробувати інструмент