JSONPath онлайн
Достаёт поля из большого JSON по пути $.items[0].id или $.users[*].email — чтобы не искать ключ глазами и проверить выборку до кода.
Значение копируйте в фикстуру, в jq-подобный скрипт, в тест. Фильтров ?() и jq-пайпов нет. Секреты из ответа в публичное поле не кладите.
Данные
Результат
Скопировано
Как пользоваться
Вставьте документ и путь вроде $.users[0].email или $.items[*].id. Корень можно писать без доллара: items[0].name.
Как интерпретировать результат
Одно совпадение — само значение. Несколько — JSON-массив. Пусто — путь не попал в структуру; проверьте имена ключей и [*].
Зачем путь, если есть глаза
Ответ API на три экрана. Нужен один id, все email вложенного массива, первый элемент. JSONPath — короткий адрес: $.data.users[0].email, $.items[*].id. Так же пишут выборки в тестах, в Kubernetes JSONPath, в части ETL.
Сначала прогоните путь здесь, потом вставьте в код. Опечатка в ключе сразу видна: «совпадений нет», а не пустой продовый отчёт.
Что умеет этот диалект
Корень $, точки, индексы [0] и [-1], ключи в кавычках ['my.key'], звёздочка [*] по массиву или по значениям объекта. Если после массива написать .id без [*], сервис пройдёт по элементам-объектам — удобная вольность, не весь стандарт Stefan Goessner.
Нет фильтров ?(@.price<10), рекурсии $.., пайпов jq. Для сложной логики возьмите jq локально. Слишком широкая * на огромном документе обрежется лимитом совпадений.
Как читать результат
Одно значение печатается как JSON-скаляр или объект. Несколько — массив. Это удобно копировать в фикстуру. Форматтер JSON на соседней странице только красив, путь не извлекает.
Kubernetes kubectl -o jsonpath= часто строже к точкам. Сверьтесь с документацией ресурса. Секреты из ответа в публичное поле лучше не класть.
Частые вопросы
Это jq?
Уже. Нет пайпов, фильтров ?() и рекурсии $... Поддержаны ключи, индексы и *.
Все id из массива?
$.items[*].id или $.items.id — второе тоже пройдёт по элементам-объектам.
Ключ с точкой?
Берите ['my.key'].
Отрицательный индекс?
$[-1] — последний элемент массива.
JSONPath в Kubernetes?
Часто другой диалект. Сверьте с документацией контроллера, не копируйте слепо.
Как взять все имена из массива?
$.users[*].name или $.users.name. Если users — объект, не массив, * обойдёт его значения.
Это JSON Pointer RFC 6901?
Нет. Pointer пишется /foo/0/bar и используется в JSON Patch. Здесь точечная нотация JSONPath.