Ce este JSONPath?
JSONPath este un limbaj de interogare pentru documente JSON, echivalentul JSON al XPath pentru XML. Stefan Goessner l-a propus în 2007 ca o modalitate scurtă și lizibilă de a indica un nod într-un arbore JSON fără a scrie un analizor. O expresie începe cu selectorul rădăcină $ și înlănțuie accesori de proprietăți, subscripte de tablou, wildcard-uri, coborâre recursivă și condiții de filtrare până când selectează nodurile dorite. În 2024, IETF a publicat RFC 9535 pentru a standardiza sintaxa care se fragmentase între implementări; acest tester rulează pe jsonpath-plus, o implementare JavaScript utilizată pe scară largă care acoperă proiectul Goessner, cea mai mare parte din RFC 9535 și câțiva operatori de extensie suplimentari.
Cum funcționează JSONPath
O expresie JSONPath se citește de la stânga la dreapta și parcurge un document JSON câte un pas. Fiecare pas preia setul de noduri care au supraviețuit pasului anterior și îl restrânge. Pipeline-ul complet de evaluare:
- Ancorează cu selectorul rădăcină
$. Fiecare expresie începe aici, indicând valoarea de nivel superior, fie că este un obiect sau un tablou. Numele de proprietăți goale fără un$inițial nu sunt JSONPath valid. - Intră în membrii copil cu notația cu punct (
$.store.book) sau notația cu paranteze ($['store']['book']). Notația cu paranteze este necesară când o cheie conține un spațiu, o cratimă sau orice caracter care nu este un identificator valid. - Cercetează fiecare nivel simultan cu operatorul de coborâre recursivă
... Expresia$..authorcolectează fiecare valoareauthorde oriunde în arbore, indiferent de adâncime. Acesta este operatorul pe care JMESPath nu îl are. - Selectează elementele tabloului după index (
[0],[-1]pentru ultimul element în jsonpath-plus), le feliază cu notația[start:end]([0:3]returnează primele trei) sau preia fiecare element cu wildcard-ul[*]. - Filtrează elementele cu un predicat în interiorul
[?(...)]. În interiorul predicatului,@se referă la elementul curent, astfel încât[?(@.price<10)]păstrează doar elementele al căror câmppriceeste mai mic de 10. Filtrele se compun cu restul căii, astfel încât poți filtra apoi coborî sau coborî apoi filtra. - Alege formatul de ieșire. Valori returnează datele potrivite în sine. Căi returnează JSONPath-ul fiecărei potriviri pentru a vedea ce a rezolvat motorul. Pointeri returnează echivalentul RFC 6901 JSON Pointer pentru fiecare potrivire, util când consumatorul din aval este JSON Patch sau un validator JSON Schema.
De ce să folosești acest tester JSONPath?
- JSON-ul tău nu părăsește niciodată browserul. Interogarea rulează în pagină, astfel încât fixture-urile de producție, PII-ul clienților și răspunsurile API pre-lansare rămân pe mașina ta.
- Motorul este
jsonpath-plus9.x, aceeași bibliotecă care stă la baza multor suite de testare de producție și afirmații CI. Rezultatele pe care le vezi aici se potrivesc cu ceea ce va vedea pipeline-ul tău de build. - Trei moduri de ieșire acoperă consumatorii din aval obișnuiți: Valori brute pentru copiere-lipire, Căi pentru depanarea rezoluției motorului și Pointeri RFC 6901 pentru fluxurile JSON Patch și JSON Schema.
- Expresiile de filtru rulează cu
preventEval: true, astfel încât o interogare lipită nu poate executa JavaScript arbitrar împotriva paginii gazdă. Acest lucru contează atunci când expresia provine dintr-un mesaj Slack, un tichet Jira sau clipboard-ul unui coleg.
Aplicații comune ale JSONPath
JSONPath apare oriunde codul trebuie să extragă un câmp dintr-o sarcină JSON fără a scrie o coborâre recursivă manual:
- Teste Postman: fila Tests din Postman expune
pm.response.json()împreună cu accesul de tip JSONPath pentru afirmații. Echipele scriu o singură expresie precum$.data.user.emailpentru a extrage un câmp dintr-un răspuns și a face afirmații în CI. - Teste de încărcare k6: scripturile k6 apelează
jsonpath()într-un bloccheck()pentru a extrage valori din corpurile răspunsurilor și a afirma praguri SLA. Aceeași expresie care a dovedit un contract în Postman poate bloca un test de încărcare în k6. - DSL JSON pentru transformări de date: AWS Step Functions evaluează JSONPath în
InputPath,ResultPathșiParameterspentru a remodela sarcinile de evenimente între stări. Argo Workflows folosește JSONPath înwithParampentru a distribui sarcini peste un tablou. Kuberneteskubectl -o jsonpathfolosește aceeași sintaxă pentru a extrage câmpuri din obiectele clusterului.
Exemplu practic
Fixture-ul canonic Goessner este documentul librăriei cu patru cărți, fiecare având category, author, title și price. Pe acest fixture, expresia $.store.book[?(@.price<10)].title rulează în trei pași. Mai întâi, $.store.book se rezolvă la tabloul tuturor celor patru cărți. Apoi, filtrul [?(@.price<10)] păstrează doar cartea cu prețul sub 10 (intrarea la 8,95). În final, .title extrage titlul acelei cărți. Rezultatul este ["Sayings of the Century"]. Comutând la Căi returnează ["$['store']['book'][0]['title']"], iar Pointeri returnează ["/store/book/0/title"].
Protejează-ți expresiile aici, apoi plasează-le direct în Postman, k6, kubectl sau o mașină de stări Step Functions. Lipește, interoghează, copiază. Nimic nu traversează rețeaua.
Ce este JSONPath?
JSONPath este un limbaj de interogare pentru documente JSON, analog cu XPath pentru XML. Propus de Stefan Goessner în 2007 și standardizat de IETF ca RFC 9535 în 2024.
Folosește o sintaxă compactă de expresii care începe cu $ (rădăcina documentului) și suportă notația cu punct, subscripte de tablou, wildcard-uri, felii, coborâre recursivă (..) și expresii de filtru ([?(...)]) pentru a selecta noduri într-un arbore JSON.
Cum se diferențiază JSONPath de JMESPath sau jq?
Toate trei interoghează JSON, dar gramaticile și scopurile lor diferă. JMESPath este standardul AWS CLI/SDK: mai strict decât JSONPath, fără coborâre recursivă, construit pentru proiecții previzibile fără efecte secundare.
jq este un limbaj de scripting Turing-complet care nu doar interoghează JSON, ci îl transformă, reduce și transmite în flux. JSONPath se situează între ele: mai expresiv decât JMESPath datorită coborârii recursive și filtrelor, mai ușor decât jq și cea mai larg suportată sintaxă în instrumentele generale de testare (Postman, Playwright, REST Assured, kubectl, Step Functions). Acest tester implementează JSONPath.
Ce dialect folosește acest tester?
Acest tester rulează jsonpath-plus 9.x. Această bibliotecă implementează specificația Goessner 2007, acoperă cea mai mare parte din RFC 9535 și adaugă operatori de extensie precum verificări de tip (@.string(), @.number(), @.boolean()) și navigare părinte (^).
Indicatorul preventEval: true este întotdeauna setat, astfel încât predicatele de filtru rulează printr-un interpretor sigur, nu prin eval() JavaScript încorporat. O interogare lipită nu poate executa cod arbitrar împotriva acestei pagini.
Pot copia valorile individuale potrivite?
Da. Butonul Copiază în clipboard copiază întregul bloc de rezultate ca un tablou JSON. Pentru a prelua o singură valoare, comută modul de ieșire la Valori, apoi selectează linia dorită în căsuța de text a rezultatelor și folosește comanda rapidă de copiere a browserului (Ctrl/Cmd + C).
Rezultatul este text JSON simplu, deci se lipește curat într-un editor de cod, un terminal, un test Postman sau un mesaj Slack.