Utilia

Provador de JSONPath

Prova expressions JSONPath amb el teu propi JSON al navegador. Filtres, porcions, descens recursiu, camins i JSON Pointers, amb exemples preparats.

Com provar una expressió JSONPath

  1. Enganxa el teu JSON a Dades JSON, o fes clic a Carrega dades d’exemple per fer servir el clàssic exemple de la llibreria.
  2. Escriu una expressió a Expressió JSONPath, o tria’n una d’Exemples.
  3. El resultat s’actualitza mentre escrius; Executa la consulta la torna a executar. La línia d’estat indica el nombre de coincidències.
  4. Fes servir Mostra per canviar entre Valors, Camins, JSON Pointers i Camins i valors, i després copia el resultat.

La sintaxi de JSONPath en poques paraules

Sintaxi Significat Exemple
$ l’arrel del document $
.name o ['name'] un fill $.store.bicycle
* tots els fills $.store.*
.. descens recursiu, a qualsevol profunditat $..author
[n] índex d’una matriu, a partir de 0 $..book[2]
[start:end:step] porció; els nombres negatius compten des del final $..book[-1:]
[a,b] unió $..book[0,1]
[?(expr)] filtre $..book[?(@.price < 10)]
^ el pare de cada coincidència $..book[?(@.price > 20)]^
~ el nom de la propietat en lloc del valor $.store.*~

Els resultats es retornen en l’ordre del document. Camins dona camins normalitzats com $['store']['book'][0]['title'], i JSON Pointers dona la forma de l’RFC 6901 /store/book/0/title, útil per a JSON Patch o per als camins d’error dels validadors d’esquemes JSON.

Expressions de filtre: què s’admet

Els filtres s’avaluen amb jsonpath-plus en mode segur: l’expressió l’analitza i l’interpreta un petit avaluador, i mai no es passa a eval ni a new Function. Dins de [?( … )] pots fer servir:

  • @ per a l’element actual, @.field i @['field'] per als seus membres, @root per a tot el document ($ no està disponible dins d’un filtre);
  • les comparacions ==, !=, ===, !==, <, <=, >, >=;
  • la lògica &&, ||, !, l’aritmètica + - * / % i el ternari a ? b : c;
  • literals de cadena, de nombre, true, false, null i d’expressió regular;
  • mètodes dels mateixos valors, per exemple @.title.startsWith('S'), @.tags.includes('new') o @.title.match(/lord/i);
  • @property (la clau o l’índex de l’element actual), @parent i @path (el seu camí normalitzat), a l’estil de jsonpath-plus.

L’accés a constructor, __proto__ i al constructor Function està bloquejat. Si un filtre falla en un element, per exemple @.isbn.startsWith('0') en un llibre sense isbn, aquest element simplement no coincideix; un error de sintaxi a l’expressió sí que s’informa. Els filtres escrits a la manera de l’RFC 9535, [?@.price < 10] sense parèntesis, s’accepten i es llegeixen com [?(@.price < 10)]. Les funcions de l’RFC 9535 com length(), count(), match() i search() no estan disponibles: fes servir mètodes de JavaScript com @.name.length.

Els selectors de tipus de jsonpath-plus també funcionen al final d’un camí: $..*@number() retorna tots els nombres, i @string(), @boolean(), @array(), @object(), @null() i @integer() fan el mateix per a altres tipus.

Preguntes freqüents

S'envia el meu JSON a un servidor?

No. L’anàlisi i l’avaluació es fan al teu navegador, i les dades no surten mai del teu ordinador.

Per què el meu filtre no retorna res?

Comprova que el camí abans del filtre seleccioni una matriu o un objecte: $.store.book[?(@.price < 10)] filtra els llibres, mentre que $.store[?(@.price < 10)] mira book i bicycle. Una propietat que falta en un element és undefined, de manera que les comparacions amb ella són falses.

Quina diferència hi ha entre `==` i `===`?

Com a JavaScript, == converteix els tipus ("10" == 10 és cert) mentre que === compara tipus i valor.

Per què la sortida està limitada?

Només s’escriuen al resultat les primeres 10 000 coincidències, per mantenir la pàgina fluida; la línia d’estat dona el recompte complet.

Està estandarditzat JSONPath?

Sí, des del 2024, per l’RFC 9535. Les implementacions encara difereixen, sobretot en els filtres; aquesta eina segueix jsonpath-plus, la sintaxi del JSONPath original de Stefan Goessner.