Darmowy tester JSONPath — wyrażenia online
Testuj wyrażenia JSONPath na dowolnym JSON-ie błyskawicznie. Silnik RFC 9535 i tryb Classic (Goessner), widoki Wartości / Ścieżki / Oba, ścieżki znormalizowane, bez eval. W 100% prywatnie, w przeglądarce, bez wysyłania.
Czym jest tester JSONPath?
Tester JSONPath to narzędzie, które pozwala napisać wyrażenie JSONPath, wkleić dokument JSON i zobaczyć dokładnie, które węzły wyrażenie wybiera — zarówno dopasowane wartości, jak i ich precyzyjne lokalizacje — bez pisania kodu czy uruchamiania skryptu. Dla programistów skraca pętlę z minut do milisekund: dostrój ścieżkę, obserwuj zmianę wyniku i wyślij zapytanie z pewnością.
JSONPath to język zapytań dla JSON-a, odpowiednik XPath dla XML-a w świecie JSON. Wyrażenie buduje się z małego alfabetu selektorów. $ to korzeń dokumentu. Kropka lub nawias wkracza w dziecko: $.store lub $['store']. Podwójna kropka .. to rekurencyjne zejście — przeszukuje każdy poziom drzewa. Symbol wieloznaczny * wybiera wszystkie elementy lub składniki. Nawiasy niosą indeksy tablic ([0]), wycinki ([start:end:step]), unie ([a,b]) i wyrażenia filtrujące ([?(@.price < 10)], gdzie @ to testowany element). Z tych kawałków możesz wyciągnąć pojedyncze pole z głęboko zagnieżdżonej odpowiedzi API, asercjonować wartości w testach, sterować przekształceniami danych w systemach takich jak Kubernetes, AWS Step Functions i Azure Logic Apps lub ekstrahować ustrukturyzowane dane z nieregularnego JSON-a — wszystko bez imperatywnego kodu przechodzenia. JSONPath jest też słynnie niespójny między implementacjami, co jest dokładnie tym problemem, który dobry tester ujawnia, zanim trafi on na produkcję.
Ten tester dostarcza dwa silniki. Domyślny to silnik RFC 9535: RFC 9535 to formalna specyfikacja JSONPath autorstwa IETF z lutego 2024 roku, pierwszy raz, gdy język został precyzyjnie ustandaryzowany po piętnastu latach rozbieżnych implementacji. Definiuje on dokładną gramatykę, koncepcję ścieżek znormalizowanych dla wyników oraz pięć standardowych funkcji — length(), count(), match(), search(), value(). Nasz silnik RFC 9535 to implementacja bez zależności, która nie używa eval, więc parsuje i interpretuje wyrażenia własną gramatyką, zamiast kompilować je do JavaScriptu. Drugi silnik to Classic (Goessner), faktyczny dialekt z 2007 roku, który implementuje większość starszych narzędzi i bibliotek online; przełącz się na niego, aby odtworzyć wyniki z narzędzia takiego jak jsonpath.com lub uruchomić wyrażenie skopiowane ze starszego kodu. Oba dialekty zgadzają się co do typowych ścieżek, ale rozchodzą się w przypadkach brzegowych — białe znaki i cudzysłowy w filtrach, kolejność unii, sposób porównywania brakujących składników oraz to, jakie funkcje istnieją — więc możliwość przełączania się między nimi w jednym miejscu to najszybszy sposób na zdiagnozowanie, dlaczego wyrażenie zachowuje się inaczej, niż oczekiwałeś.
Co tester ujawnia poza surowymi wartościami: wynikiem zapytania JSONPath jest lista węzłów, a to narzędzie może pokazać ją na trzy sposoby. Widok Wartości renderuje dopasowane węzły jako tablicę JSON, dokładnie to, co skonsumowałbyś w kodzie. Widok Ścieżki renderuje ścieżkę znormalizowaną każdego dopasowania — kanoniczną lokalizację w nawiasach z cudzysłowami, taką jak $['store']['book'][0]['title'], która jednoznacznie identyfikuje, gdzie w dokumencie znajduje się wartość, bez względu na to, jak napisano wyrażenie. Dwa wyrażenia, które wybierają ten sam węzeł, produkują tę samą ścieżkę znormalizowaną, co czyni widok Ścieżki nieocenionym przy debugowaniu. Widok Oba pokazuje wartości i ścieżki obok siebie. Wiersz statystyk raportuje, ile węzłów się dopasowało.
Bezpieczeństwo jest tu sprawą pierwszorzędną. Wiele ewaluatorów JSONPath online działa na serwerze lub osadza bibliotekę, która ewaluuje predykaty filtrów za pomocą javascriptowego eval — projekt, który wyprodukował podatności na zdalne wykonanie kodu śledzone jako CVE-2024-21534 i CVE-2025-1302 w szeroko używanych pakietach JSONPath. To narzędzie nie używa żadnego eval. Silnik RFC 9535 nie ma ścieżki eval, a silnik Classic jest zbudowany na załatanym, przypiętym wydaniu jsonpath-plus z jawnie wyłączonym eval. To zamyka klasę błędów RCE i pozwala narzędziu działać pod ścisłą Content-Security-Policy, która zabrania unsafe-eval. Każda ewaluacja jest lokalna: twój JSON i twoje wyrażenie nigdy nie opuszczają strony, nigdy nie są rejestrowane i nigdy nie są zapisywane na dysku — tylko twoje preferencje silnika i widoku utrwalają się do localStorage. To czyni narzędzie bezpiecznym dla zastrzeżonych ładunków API, zredagowanych logów, wewnętrznej konfiguracji i wszelkich danych ze schematem, którego nie wkleiłbyś do usługi opartej na serwerze.
Jeśli twoim zadaniem jest praca z JSON-em, sparuj to z innymi narzędziami JSON na stronie: sformatuj i ładnie wyświetl wejście za pomocą Formatowania JSON, porównaj dwa dokumenty za pomocą JSON Diff, sprawdź ładunek względem schematu za pomocą Walidatora schematu JSON lub zamień przykładową odpowiedź na typowane interfejsy za pomocą JSON to TypeScript.
// The expression you build in this tester maps straight onto the
// RFC 9535 reference library used under the hood.
import { query, paths } from 'jsonpath-rfc9535';
const document = {
store: {
book: [
{ title: 'Sayings of the Century', author: 'Nigel Rees', price: 8.95 },
{ title: 'Sword of Honour', author: 'Evelyn Waugh', price: 12.99 },
{ title: 'Moby Dick', author: 'Herman Melville', price: 8.99 },
{ title: 'The Lord of the Rings', author: 'J. R. R. Tolkien', price: 22.99 }
]
}
};
// Values: query(document, path) returns the matched values directly.
const titles = query(document, '$.store.book[*].title');
// → ['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']
// Filter: books cheaper than 10.
const cheap = query(document, '$.store.book[?(@.price < 10)].title');
// → ['Sayings of the Century', 'Moby Dick']
// Normalized paths: paths(document, path) returns where each match lives.
const authorPaths = paths(document, '$..author');
// → ["$['store']['book'][0]['author']", "$['store']['book'][1]['author']", ...]
// RFC 9535 functions like length() are used INSIDE filters, not as a segment.
const longTitles = query(document, '$.store.book[?length(@.title) > 15]');
// → the two books whose title is longer than 15 characters Kluczowe funkcje
Standardowy silnik RFC 9535 (bez eval)
Domyślny silnik implementuje RFC 9535, formalną specyfikację JSONPath autorstwa IETF z 2024 roku — dokładną gramatykę, ścieżki znormalizowane i pięć standardowych funkcji. Jest bez zależności i nie używa eval, więc parsuje i interpretuje wyrażenia własną gramatyką, zamiast kompilować je do JavaScriptu. Działa pod ścisłą Content-Security-Policy.
Tryb zgodności Classic (Goessner)
Jeden przełącznik zmienia na silnik zgodny z Goessnerem (zbudowany na jsonpath-plus, skonstruowany z wyłączonym eval), dzięki czemu wyrażenia skopiowane ze starszych narzędzi, takich jak jsonpath.com, zachowują się tak, jak je tam widziałeś. Przełączaj między RFC 9535 a Classic, aby porównywać wyniki i diagnozować, dlaczego ścieżka dopasowuje się inaczej w różnych dialektach.
Trzy widoki wyniku: Wartości, Ścieżki, Oba
Wartości renderują dopasowane węzły jako tablicę JSON, dokładnie to, co konsumujesz w kodzie. Ścieżki renderują ścieżkę znormalizowaną każdego dopasowania, jak $['store']['book'][0]['title']. Oba pokazują je obok siebie, dzięki czemu możesz odwzorować każdą wartość na jej precyzyjną lokalizację. Aktywny widok utrzymuje się między sesjami.
Ścieżki znormalizowane dla każdego dopasowania
Każdy wynik niesie swoją kanoniczną ścieżkę znormalizowaną w nawiasach z cudzysłowami — sposób RFC 9535 na jednoznaczne zidentyfikowanie lokalizacji węzła niezależnie od tego, jak napisano wyrażenie. Dwa wyrażenia trafiające w ten sam węzeł produkują tę samą ścieżkę znormalizowaną, co czyni debugowanie niejednoznacznych zapytań prostym.
Pełne wsparcie selektorów
Korzeń $, bieżący element @, dziecko .name, rekurencyjne zejście ..name, symbol wieloznaczny [*], indeks tablicy [0], wycinek [start:end:step], unia [a,b] i wyrażenia filtrujące [?()] z operatorami porównania i logicznymi. Wbudowana ściąga dokumentuje każdy selektor, dzięki czemu nigdy nie musisz opuszczać strony, by go sprawdzić.
Rozszerzenia funkcyjne RFC 9535
Wywołuj length(), count(), match(), search() i value() wewnątrz wyrażeń — policz elementy tablicy, przetestuj łańcuch względem wzorca I-Regexp lub filtruj po rozmiarze zagnieżdżonej listy. Te standardowe funkcje są dostępne w domyślnym silniku; narzędzie poprosi cię o przełączenie silników, jeśli wywołasz je w trybie Classic.
Formatowanie, wczytywanie i przykłady
Formatuj JSON ładnie formatuje twoje wejście, dzięki czemu struktura jest czytelna przed zapytaniem. Wczytaj odczytuje plik .json lub .txt w całości w przeglądarce — nigdy nie jest nigdzie wysyłany. Lista Przykłady ładuje znane, sprawdzone wyrażenia startowe na przykładowych danych, dzięki czemu zobaczysz silnik w działaniu, zanim dostosujesz ścieżkę.
Udostępnianie linkiem bezpośrednim (bez wysyłania)
Kopiuj link koduje JSON, wyrażenie, silnik i widok do fragmentu hash adresu URL. Przeglądarki nigdy nie przesyłają fragmentów URL w żądaniach, więc udostępniony link odtwarza twój pełny stan na maszynie odbiorcy bez kontaktu z serwerami go-tools.org. Samowystarczalny i przyjazny audytowi do wspólnego debugowania.
W 100% prywatnie, tylko w przeglądarce
Twój JSON i twoje wyrażenie nigdy nie opuszczają twojego urządzenia. Żadnych żądań sieciowych, żadnego rejestrowania, żadnej analityki tego, co wpisujesz — sprawdź w DevTools → Sieć. Tylko preferencje silnika i widoku utrwalają się do localStorage. Bezpieczne dla zastrzeżonych ładunków, zredagowanych logów i wszelkich danych, których nie wkleiłbyś do jsonpath.com.
Opracowane przykłady
Wybierz wszystkie tytuły książek z dokumentu księgarni
$.store.book[*].title
["Sayings of the Century", "Sword of Honour", "Moby Dick", "The Lord of the Rings"]
Wklej klasyczny JSON księgarni Goessnera, wpisz wyrażenie, a widok Wartości zwróci tablicę JSON ze wszystkimi czterema tytułami. Przełącz na Ścieżki, aby zobaczyć każdy wynik jako ścieżkę znormalizowaną, np. $['store']['book'][0]['title']. Symbol wieloznaczny [*] iteruje po każdym elemencie tablicy book; .title rzutuje jeden składnik z każdego z nich.
Filtruj książki tańsze niż 10 za pomocą wyrażenia filtrującego
$.store.book[?(@.price < 10)].title
["Sayings of the Century", "Moby Dick"]
Selektor filtra [?()] zachowuje tylko te elementy tablicy, dla których predykat jest prawdziwy; @ to bieżący element. W danych księgarni (ceny 8.95, 12.99, 8.99, 22.99) kwalifikują się dwie książki. Oba silniki akceptują tę postać, ale pamiętaj, że Classic (Goessner) zapisuje ten sam filtr jako [?(@.price<10)] — przełącz silnik, jeśli skopiowałeś wyrażenie ze starszego narzędzia.
Przejdź całe drzewo za pomocą rekurencyjnego zejścia
$..author
["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"]
Operator .. zstępuje na każdy poziom dokumentu i zbiera każdy składnik author, gdziekolwiek się pojawi, niezależnie od głębokości zagnieżdżenia. Rekurencyjne zejście to najszybszy sposób na wyciągnięcie jednego pola z głęboko zagnieżdżonej lub nieregularnej struktury bez wypisywania pełnej ścieżki.
Wytnij wycinek tablicy za pomocą [start:end:step]
$.store.book[0:2].title
["Sayings of the Century", "Sword of Honour"]
Wycinki tablicy stosują tę samą półotwartą konwencję [start:end] co Python i JavaScript: indeks 0 aż do, ale bez indeksu 2, zwraca dwie pierwsze książki. Dodaj trzecie pole jako krok — $.store.book[::2] pobiera co drugi element. Górna granica jest wyłączna, co stanowi częstą pułapkę z błędem o jeden, którą widok Ścieżki wyraźnie ujawnia.
Filtruj po długości tytułu z funkcją length() z RFC 9535
$.store.book[?length(@.title) > 15]
[{"title": "Sayings of the Century", "author": "Nigel Rees", "price": 8.95}, {"title": "The Lord of the Rings", "author": "J. R. R. Tolkien", "price": 22.99}] length() to jedna z pięciu standardowych funkcji RFC 9535 i jest poprawna wyłącznie wewnątrz wyrażenia filtrującego [?...] — nigdy jako samodzielny segment ścieżki, jak $.store.book.length(), który gramatyka RFC 9535 odrzuca (ta postać segmentu to rozszerzenie jsonpath-plus, a nie standardowy JSONPath). Tutaj filtr zachowuje każdą książkę, której tytuł ma więcej niż 15 znaków; w danych księgarni wybierane są tytuły dłuższe niż 15 znaków (na przykład „Sayings of the Century” i „The Lord of the Rings”), a krótsze, jak „Moby Dick” i „Sword of Honour”, są wykluczane. count(), match(), search() i value() również stosuje się wewnątrz filtrów. Te funkcje to cecha RFC 9535 — przełącz na silnik standardowy (domyślny), aby ich użyć; tryb Classic (Goessner) ich nie implementuje.
Wybierz unię dwóch nazwanych składników
$.store.book[0]['title','author']
["Sayings of the Century", "Nigel Rees"]
Selektor unii [a,b] zbiera kilkoro dzieci w jednym wyrażeniu. Tutaj pobiera jednocześnie tytuł i autora pierwszej książki. Unie działają także z indeksami tablic — [0,2] chwyta pierwszy i trzeci element. Widok Oba paruje każdą wartość z jej ścieżką znormalizowaną, dzięki czemu dokładnie widać, który składnik dał który wynik.
Jak używać testera JSONPath
- 1
Wklej lub wczytaj swój JSON
Przeciągnij JSON do pola wejściowego, wklej go lub kliknij Wczytaj, aby załadować plik .json / .txt z dysku. Formatuj JSON ponownie wcina dokument. Niepoprawny JSON jest oznaczany w miejscu komunikatem parsera, zanim wykonasz zapytanie.
- 2
Wybierz silnik
RFC 9535 (standard IETF z 2024 roku, bez eval) jest domyślny. Przełącz na Classic (Goessner), gdy uruchamiasz wyrażenie skopiowane ze starszego narzędzia, takiego jak jsonpath.com, aby wyniki zgadzały się z tym, co tam widziałeś.
- 3
Wpisz swoje wyrażenie JSONPath
Wiodący $ jest pokazany za ciebie. Zacznij od ścieżki dziecka, jak .store.book[*].title, indeksu, jak [0], rekurencyjnego zejścia, jak ..author, lub filtra, jak [?(@.price < 10)]. Wyniki aktualizują się na żywo w trakcie pisania.
- 4
Przełącz widok wyniku
Wartości pokazują tablicę JSON dopasowanych wartości. Ścieżki pokazują ścieżkę znormalizowaną każdego dopasowania, jak $['store']['book'][0]['title']. Oba pokazują je obok siebie, dzięki czemu możesz odwzorować każdą wartość na jej dokładną lokalizację w dokumencie.
- 5
Skopiuj wynik lub udostępnij link bezpośredni
Kopiuj wynik umieszcza wyjście w schowku. Kopiuj link koduje JSON, wyrażenie, silnik i widok do fragmentu hash adresu URL (bez wysyłania), dzięki czemu współpracownik może odtworzyć dokładne zapytanie lokalnie na własnej maszynie.
Częste błędy w JSONPath
Pominięto wiodący korzeń $
Każde wyrażenie JSONPath zaczyna się w korzeniu, zapisanym jako $. Pominięcie go (lub zapisanie ścieżki tak, jakby $ było domyślne) sprawia, że większość silników odrzuca wyrażenie. Tester pokazuje $ za ciebie, więc zacznij wejście od następnego selektora — kropki, nawiasu lub rekurencyjnego zejścia.
store.book[*].title → invalid (no root)
$.store.book[*].title → selects every title
Błąd wycinka o jeden — oczekiwano włączenia indeksu końcowego
Wycinki są półotwarte: [start:end] biegnie aż do, ale bez end. [0:2] zwraca dwa elementy (indeksy 0 i 1), nie trzy. Aby uwzględnić ostatni element po indeksie, użyj [start:] lub przesuń górną granicę o jeden poza niego.
$.store.book[0:2] → first TWO books, not three
$.store.book[0:3] → first three books (indices 0,1,2)
Użyto wyrażenia Classic w silniku RFC 9535 (lub odwrotnie)
Wyrażenie skopiowane z jsonpath.com lub jsonpath-plus może parsować się lub dopasowywać inaczej pod RFC 9535 z powodu różnic w filtrach, uniach i funkcjach. Jeśli wyniki wyglądają błędnie, przełącz przełącznik silnika, aby pasował do dialektu, dla którego napisano wyrażenie.
Classic filter run under RFC 9535 → parse error or unexpected nodes
Switch engine to Classic (Goessner) → reproduces the original result
Wywołano funkcję RFC 9535 jako samodzielny segment
length(), count(), match(), search() i value() to rozszerzenia funkcyjne RFC 9535, które są poprawne wyłącznie wewnątrz filtra [?...]. Samodzielne wywołanie segmentu, jak $.store.book.length(), jest odrzucane przez gramatykę RFC 9535 (to rozszerzenie jsonpath-plus, a nie standard). Wywołaj funkcję wewnątrz filtra i użyj domyślnego silnika RFC 9535 — silnik Classic (Goessner) nie implementuje tych funkcji.
$.store.book.length() → parse error (not a valid RFC 9535 segment)
$.store.book[?length(@.title) > 15] → books with a title over 15 chars
Pominięto @ wewnątrz wyrażenia filtrującego
Wewnątrz filtra [?()] bieżącym elementem jest @, nie $. Zapisanie $.price odnosi się z powrotem do korzenia dokumentu, a nie do testowanego elementu, więc filtr wybiera nic albo wszystko. Użyj @, aby adresować składniki filtrowanego elementu.
$.store.book[?($.price < 10)] → wrong scope
$.store.book[?(@.price < 10)] → books under 10
Ujęto nazwę składnika błędną składnią
Notacja nawiasowa wymaga cudzysłowów wokół kluczy łańcuchowych: $['store'] lub $.store oba działają, ale $[store] (bez cudzysłowów w nawiasach) to błąd indeksu/identyfikatora. Użyj cudzysłowów wewnątrz nawiasów dla każdego klucza ze spacjami, kropkami lub znakami specjalnymi: $['first name'].
$[store][book] → invalid bracket selectors
$['store']['book'] → same as $.store.book
Oczekiwano, że rekurencyjne zejście zatrzyma się na pierwszym poziomie
$..author nie zatrzymuje się na górze — zbiera każdy składnik author na każdej głębokości. Jeśli chcesz tylko bezpośrednie dzieci, wypisz ścieżkę. Rekurencyjne zejście po dużym dokumencie może zwrócić znacznie więcej węzłów, niż zamierzano.
$..price → every price anywhere in the tree
$.store.book[*].price → only book prices
Kto używa tego narzędzia
- Wyciąganie pól z odpowiedzi API
- Wyciągnij identyfikatory żądań, zagnieżdżone atrybuty zasobów lub listę nazw z ładunku JSON bez pisania kodu przechodzenia. Zbuduj ścieżkę tutaj na przykładowej odpowiedzi, potwierdź w widoku Wartości, że zwraca dokładnie te węzły, których chcesz, a potem wklej zweryfikowane wyrażenie do swojej aplikacji lub testu.
- Pisanie asercji do testów integracyjnych
- Wiele frameworków testowych i narzędzi do testowania kontraktów (REST Assured, Karate, Postman) używa JSONPath do asercji na ciałach odpowiedzi. Naszkicuj ścieżkę asercji tutaj, sprawdź, że wybiera właściwy węzeł względem prawdziwej odpowiedzi, i skopiuj ją do testu — łapiąc błędną ścieżkę, zanim zestaw stanie się czerwony.
- Konfigurowanie przekształceń danych w potokach
- Kubernetes, AWS Step Functions, Azure Logic Apps i wiele narzędzi ETL akceptuje JSONPath do adresowania pól w ładunkach zdarzeń. Prototypuj dokładną ścieżkę względem reprezentatywnego zdarzenia tutaj, potwierdź, że się rozwiązuje, i umieść ją w konfiguracji swojego potoku z pewnością, że wskazuje tam, gdzie zamierzasz.
- Odtwarzanie wyniku z jsonpath.com prywatnie
- Masz wyrażenie z ewaluatora opartego na serwerze, ale nie możesz wkleić swoich danych do strony trzeciej? Przełącz na tryb Classic (Goessner), załaduj swój JSON i odtwórz ten sam wynik lokalnie — żaden ładunek nigdy nie opuszcza twojej przeglądarki, więc zastrzeżone dane pozostają na twojej maszynie.
- Migracja starszych wyrażeń do RFC 9535
- Przechodzisz do systemu deklarującego zgodność z RFC 9535? Uruchom starsze wyrażenie w trybie Classic, a następnie przełącz na silnik RFC 9535, aby zobaczyć, czy wciąż się parsuje i dopasowuje te same węzły. Porównanie dwóch silników wskazuje różnice w filtrach, uniach i funkcjach, na które inaczej natknąłbyś się na produkcji.
- Debugowanie, dlaczego ścieżka zwraca błędne węzły
- Ścieżka, która wybiera zbyt wiele lub zbyt mało, jest trudna do przeanalizowania na podstawie samych wartości. Przełącz na widok Ścieżki, aby zobaczyć znormalizowaną lokalizację każdego dopasowania — dokładny indeks tablicy, dokładny łańcuch składników — a błąd wycinka o jeden lub zabłąkane rekurencyjne zejście stanie się natychmiast oczywiste.
- Nauczanie lub recenzowanie JSONPath
- Otwórz działające wyrażenie na przykładowych danych i przejdź przez nie selektor po selektorze, przełączając między Wartości i Ścieżki, aby uczący się widział zarówno to, co jest wybierane, jak i gdzie się znajduje. Ściąga i opracowane przykłady dają ustrukturyzowane odniesienie do recenzji kodu lub wdrażania.
Uwagi o silniku i algorytmie
- Silnik RFC 9535 (jsonpath-rfc9535, bez zależności)
- Domyślny silnik implementuje gramatykę IETF RFC 9535 bezpośrednio: tokenizuje i parsuje wyrażenie do abstrakcyjnego drzewa składniowego oraz interpretuje je względem dokumentu. Nigdzie na ścieżce nie ma eval ani konstruktora Function, więc jest odporny na klasę błędów wstrzykiwania eval i działa pod ścisłą Content-Security-Policy.
- Silnik Classic (jsonpath-plus, eval wyłączony)
- Silnik Classic (Goessner) to jsonpath-plus przypięty do załatanego wydania (>= 10.4.0) i skonstruowany z opcją eval jawnie ustawioną na false. To zachowuje zgodność z dialektem Goessnera, jednocześnie zamykając wektory zdalnego wykonania kodu śledzone jako CVE-2024-21534 i CVE-2025-1302, które dotyczyły domyślnej ścieżki filtra biblioteki opartej na eval.
- Generowanie ścieżek znormalizowanych
- Każde dopasowanie jest raportowane ze swoją ścieżką znormalizowaną RFC 9535 — formą kanoniczną używającą notacji nawiasowej z pojedynczymi cudzysłowami ($['store']['book'][0]['title']) z indeksami tablic jako gołymi liczbami całkowitymi. Ścieżki znormalizowane są stabilne i unikalne dla węzła, więc równoważne wyrażenia dają identyczne ścieżki, na czym widoki Ścieżki i Oba opierają jednoznaczną identyfikację wyniku.
- Leniwie ładowane fragmenty silników
- Oba silniki są ładowane jako osobne fragmenty JavaScriptu dopiero przy pierwszym wyborze, dzięki czemu początkowa strona pozostaje lekka, a silnik, którego nie używasz, nigdy nie jest pobierany. Przełączenie silników natychmiast ponownie ewaluuje bieżące wyrażenie względem bieżącego dokumentu, bez przeładowania strony.
- Lokalne odczytywanie plików i formatowanie JSON
- Przycisk Wczytaj używa przeglądarkowego API FileReader do odczytania pliku .json lub .txt do wejścia w całości po stronie klienta — plik nigdy nie jest przesyłany. Formatuj JSON parsuje i ponownie serializuje wejście z wcięciem dwóch spacji, ujawniając błędy parsowania w miejscu, dzięki czemu zniekształcony JSON jest łapany przed ewaluacją.
- Linki bezpośrednie przez fragment hash URL (nigdy nie przesyłane)
- Stan udostępniania jest kodowany we fragmencie location.hash, niosąc JSON, wyrażenie, aktywny silnik i widok wyniku. Przeglądarki nigdy nie dołączają fragmentu do żądań HTTP, więc serwery go-tools.org otrzymują zero danych przy otwarciu linku bezpośredniego; nawadnianie odbywa się w całości na urządzeniu odbiorcy.
Najlepsze praktyki JSONPath
- Wybierz silnik pasujący do twojego celu
- Jeśli twój system docelowy deklaruje zgodność z RFC 9535, pisz i weryfikuj względem silnika RFC 9535. Jeśli odtwarzasz lub utrzymujesz wyrażenie ze starszego narzędzia lub biblioteki, użyj Classic (Goessner). Walidacja względem błędnego dialektu to najczęstszy powód, dla którego ścieżka, która działała w testerze, zawodzi na produkcji.
- Weryfikuj widokiem Ścieżki, nie tylko Wartości
- Widok Wartości mówi ci, co się dopasowało; widok Ścieżki mówi, gdzie. Gdy zapytanie zwraca poprawnie wyglądające wartości, może i tak wybierać je z błędnej lokalizacji — zabłąkane rekurencyjne zejście lub zbyt szeroki symbol wieloznaczny. Sprawdź ścieżki znormalizowane, aby potwierdzić, że wyrażenie trafia dokładnie w te węzły, które zamierzasz.
- Pamiętaj o wyłącznym końcu wycinka
- [0:2] wybiera indeksy 0 i 1, nie 0 do 2 — górna granica jest wyłączna, tak jak w Pythonie i JavaScripcie. Błędy wycinka o jeden to najczęstszy błąd JSONPath. Użyj widoku Ścieżki, aby odczytać dokładny indeks każdego wybranego elementu i potwierdzić granicę, zanim wyślesz.
- Preferuj jawną ścieżkę nad rekurencyjnym zejściem, gdy możesz
- $..price jest wygodne, ale dopasowuje każdą cenę gdziekolwiek w dokumencie, w tym te, których nie zamierzałeś. Gdy znasz strukturę, wypisz ścieżkę ($.store.book[*].price), aby zapytanie pozostało precyzyjne i przewidywalne w miarę wzrostu danych. Zarezerwuj .. dla naprawdę nieregularnych lub nieznanych kształtów.
- Zachowuj spójne białe znaki i cudzysłowy w filtrach
- RFC 9535 dokładnie trzyma się swojej gramatyki dla wyrażeń filtrujących, podczas gdy klasyczny dialekt jest luźniejszy. Pisz filtry czysto — ujmuj literały łańcuchowe w pojedyncze cudzysłowy ('fiction'), zachowuj odstępy wokół operatorów i unikaj polegania na pobłażliwym parsowaniu — aby to samo wyrażenie ewaluowało się tak samo niezależnie od tego, który silnik lub biblioteka ostatecznie je uruchomi.
Najczęściej zadawane pytania
Czy mój JSON lub wyrażenie JSONPath jest wysyłane na wasz serwer?
Czym jest JSONPath i do czego służy?
Jaka jest różnica między RFC 9535 a klasyczną składnią Goessnera?
Dlaczego to samo wyrażenie zwraca różne wyniki w obu silnikach i jak użyć wyrażenia skopiowanego z jsonpath.com?
Jak działają wyrażenia filtrujące [?()]?
Co robi rekurencyjne zejście (..)?
Czym są funkcje RFC 9535 length(), count(), match(), search() i value()?
Jak działają wycinki tablicy [start:end:step]?
Czym jest selektor unii i jak wybrać wiele kluczy naraz?
Czy mogę udostępnić zapytanie JSONPath i jego JSON przez link?
Czy istnieje maksymalny rozmiar JSON-a?
Czym to się różni od jsonpath.com i czy jest bezpieczne — bez eval?
Co pokazują widoki Wartości, Ścieżki i Oba?
Czy to działa offline i co z Content-Security-Policy?
Powiązane narzędzia
Zobacz wszystkie narzędzia →Koder i dekoder Base64
Kodowanie i formatowanie
Zakoduj i zdekoduj Base64 online za darmo. Konwersja w czasie rzeczywistym z pełną obsługą UTF-8 i emoji. 100% w przeglądarce, bez rejestracji.
Konwerter Base64 na obraz
Kodowanie i formatowanie
Zdekoduj ciąg Base64 lub data URI z powrotem na obraz w przeglądarce. Podejrzyj, odczytaj wymiary i MIME, a potem pobierz jako PNG, JPG, GIF, SVG. Bez przesyłania.
Konwerter CSV na JSON
Kodowanie i formatowanie
Konwertuj CSV na JSON w przeglądarce. RFC 4180, wnioskowanie typów, nagłówek, big-int safe. 100% prywatnie, bez wysyłki.
Konwerter .env na JSON
Kodowanie i formatowanie
Wklej plik .env i od razu otrzymaj JSON. Hasła, klucze API i tokeny nigdy nie opuszczają przeglądarki — 100% prywatnie, bez wysyłania, parser dotenv.
Konwerter HTML na Markdown
Kodowanie i formatowanie
Konwertuj HTML na czysty Markdown w przeglądarce — tabele GFM, listy zadań i linki. Wybierz nagłówki ATX/Setext oraz linki inline lub referencyjne. Idealne do migracji treści webowej lub zasilania LLM. 100% prywatnie.
Konwerter obrazu na Base64
Kodowanie i formatowanie
Konwertuj obrazy na data URI Base64 w przeglądarce — PNG, JPG, GIF, WebP, SVG, ICO. Kopiuj wynik HTML, CSS, Markdown i JSON. 100% prywatnie, bez przesyłania.