Utilia

JSONPath тестер

Тестирајте JSONPath изрази врз вашиот JSON во прелистувачот. Филтри, исечоци, рекурзивно спуштање, патеки и JSON Pointers, со готови примери.

Како да тестирате JSONPath израз

  1. Залепете го вашиот JSON во JSON податоци или кликнете Вчитај примерок на податоци за да го користите класичниот пример со книжарница.
  2. Внесете израз во JSONPath израз или изберете од Примери.
  3. Резултатот се освежува додека пишувате; Изврши барање го извршува повторно. Статусната линија го дава бројот на совпаѓања.
  4. Користете Прикажи за да префрлате меѓу Вредности, Патеки, JSON Pointers и Патеки и вредности, па копирајте го резултатот.

JSONPath синтакса накратко

Синтакса Значење Пример
$ коренот на документот $
.name или ['name'] дете $.store.bicycle
* секое дете $.store.*
.. рекурзивно спуштање, на која било длабочина $..author
[n] индекс на низа, од 0 $..book[2]
[start:end:step] исечок; негативните броеви бројат од крајот $..book[-1:]
[a,b] унија $..book[0,1]
[?(expr)] филтер $..book[?(@.price < 10)]
^ родителот на секое совпаѓање $..book[?(@.price > 20)]^
~ името на својството наместо вредноста $.store.*~

Резултатите се враќаат по редоследот на документот. Патеки дава нормализирани патеки како $['store']['book'][0]['title'], а JSON Pointers ја дава формата од RFC 6901 /store/book/0/title, корисна за JSON Patch или за патеките на грешки на валидаторите на JSON Schema.

Филтер изрази: што е поддржано

Филтрите се оценуваат со jsonpath-plus во безбеден режим: изразот го анализира и толкува мал евалуатор, никогаш не се предава на eval или new Function. Во [?( … )] можете да користите:

  • @ за тековната ставка, @.field и @['field'] за нејзините членови, @root за целиот документ ($ не е достапен во филтер);
  • споредби ==, !=, ===, !==, <, <=, >, >=;
  • логика &&, ||, !, аритметика + - * / % и тернарниот оператор a ? b : c;
  • литерали за низа, број, true, false, null и регуларен израз;
  • методи на самите вредности, на пример @.title.startsWith('S'), @.tags.includes('new') или @.title.match(/lord/i);
  • @property (клучот или индексот на тековната ставка), @parent и @path (нејзината нормализирана патека), во стил на jsonpath-plus.

Пристапот до constructor, __proto__ и конструкторот Function е блокиран. Ако филтер не успее на една ставка, на пример @.isbn.startsWith('0') на книга без isbn, таа ставка едноставно не се совпаѓа; синтаксна грешка во изразот се пријавува. Филтрите напишани по RFC 9535, [?@.price < 10] без загради, се прифаќаат и се читаат како [?(@.price < 10)]. Функциите од RFC 9535 како length(), count(), match() и search() не се достапни: користете JavaScript методи како @.name.length.

Селекторите на типови од jsonpath-plus исто така работат на крајот од патека: $..*@number() го враќа секој број, а @string(), @boolean(), @array(), @object(), @null() и @integer() го прават истото за другите типови.

Често поставувани прашања

Дали мојот JSON се испраќа на сервер?

Не. Анализирањето и оценувањето се случуваат во вашиот прелистувач, а вашите податоци никогаш не го напуштаат вашиот компјутер.

Зошто мојот филтер не враќа ништо?

Проверете дали патеката пред филтерот избира низа или објект: $.store.book[?(@.price < 10)] ги филтрира книгите, додека $.store[?(@.price < 10)] гледа во book и bicycle. Својство што недостасува кај ставка е undefined, па споредбите со него се неточни.

Која е разликата меѓу `==` и `===`?

Како во JavaScript, == ги конвертира типовите ("10" == 10 е точно), додека === го споредува типот и вредноста.

Зошто излезот е ограничен?

Во резултатот се запишуваат само првите 10 000 совпаѓања за страницата да остане одзивна; статусната линија го дава целиот број.

Дали JSONPath е стандардизиран?

Да, од 2024, со RFC 9535. Имплементациите сепак се разликуваат, особено во филтрите; оваа алатка го следи jsonpath-plus, синтаксата на оригиналниот JSONPath на Stefan Goessner.