JSONPath — це мова запитів для вибірки значень із JSON-документа, за аналогією з тим, як XPath працює для XML. Замість ручного проходу по вкладених об’єктах і масивах у коді, можна одним виразом вказати, які саме дані потрібні.
Базовий синтаксис
Вираз завжди починається з $, що позначає корінь документа. Далі йдуть звернення до полів через крапку ($.user.name) або через квадратні дужки ($['user']['name']), а до елементів масиву — за індексом ($.items[0]).
Вибірка кількох значень одразу
Символ * вибирає всі елементи на певному рівні, а .. — рекурсивний спуск, що знаходить поле на будь-якій глибині вкладеності незалежно від точного шляху. Фільтри у формі [?(@.price < 10)] дозволяють вибирати елементи масиву за умовою, схожою на вираз мовою програмування.
Навіщо це потрібно
- Швидко перевірити чи витягнути конкретне поле з великої API-відповіді під час налагодження.
- Написати умову фільтрації логів чи подій у форматі JSON без окремого скрипту.
- Дістати значення з конфігураційного файлу без написання парсера вручну.
Обмеження
На відміну від XPath, у JSONPath немає єдиного офіційного стандарту — різні бібліотеки й інструменти підтримують дещо різні розширення синтаксису (особливо фільтри). Базовий синтаксис із крапками, дужками та зірочками працює практично скрізь однаково.
Ключі з крапками чи пробілами
Якщо назва поля сама містить крапку, дефіс чи пробіл (наприклад, "user.name" як єдиний ключ, а не вкладеність), запис через крапку $.user.name стане неоднозначним — парсер прочитає це як вкладені поля user і name. У таких випадках ключ обов’язково беруть у квадратні дужки з лапками: $['user.name'].