Ecosistema
JSONPath, JMESPath y jq: una entrada y resultados comprobados
Ejecuta selecciones equivalentes sobre un JSON descargable, compara la forma del resultado y elige según tu herramienta.
Utiliza el lenguaje que soporta la aplicación destinataria. Una consulta jq no se pega sin cambios en JSONPath, y una prueba correcta en el navegador no demuestra que otra biblioteca soporte las mismas extensiones.
Ejecuta la misma selección
Descarga books.json. Abre el probador JSONPath, pega esta entrada y selecciona los títulos con precio inferior a 10:
{"books":[{"title":"A","price":8},{"title":"B","price":12},{"title":"C","price":9}]}
Expresión JSONPath:
$.books[?(@.price < 10)].title
Valores esperados en el probador:
["A","C"]
Expresión JMESPath equivalente; las comillas invertidas delimitan un literal numérico JSON:
books[?price < `10`].title
Comando jq equivalente, con corchetes que reúnen los valores en un array:
jq '[.books[] | select(.price < 10) | .title]' books.json
Las tres selecciones producen los valores A y C. Sin los corchetes exteriores, jq emitiría dos strings JSON separados. Esa diferencia importa si el siguiente proceso espera un documento único en vez de una secuencia de valores.
Seleccionar y transformar son tareas distintas
JSONPath selecciona nodos. Para renombrar campos, usa un lenguaje que permita construir objetos. En JMESPath:
books[?price < `10`].{name: title, cost: price}
En jq:
jq '[.books[] | select(.price < 10) | {name: .title, cost: .price}]' books.json
Salida esperada:
[{"name":"A","cost":8},{"name":"C","cost":9}]
JMESPath define funciones como sort_by, length y contains. Los requisitos de tipo se comprueban al evaluar: una consulta con sintaxis válida puede fallar si recibe datos incompatibles. No presupongas que una función jq también existe en JMESPath.
Prueba datos vacíos y ausentes
Cambia el umbral de precio a cero: la salida agrupada debe ser []. Elimina books y repite: según implementación y operaciones posteriores, una ruta ausente puede producir null, ninguna coincidencia o un error. Decide qué acepta tu integración para que un informe vacío no parezca un éxito por accidente.
Un JSON Pointer como /books/0/title identifica una ubicación concreta, no es un filtro JSONPath. Los errores de un validador de esquemas suelen usar convenciones Pointer; consulta su formato antes de interpretarlos.
Elige dónde ejecutar
JSONPath sirve si la respuesta ya existe en la entrada y la aplicación admite su dialecto. JMESPath se utiliza en --query de AWS CLI y permite construir objetos de salida. jq resulta útil para transformaciones de consola y streams; su lectura normal sigue materializando el documento.
JSONCraft ofrece JSONPath y un visor de árbol; no afirma ejecutar JMESPath o jq en el navegador. Para exportaciones grandes, consulta streaming.
Referencias: RFC 9535, JSONPath Plus, especificación JMESPath y manual jq.
Herramientas relacionadas
Preguntas frecuentes
¿JSONCraft implementa exactamente el RFC de JSONPath?
El probador usa JSONPath Plus. No presupongas conformidad completa con RFC 9535: comprueba el dialecto y las opciones de tu aplicación destinataria.
¿group_by es una función estándar de JMESPath?
No. jq ofrece group_by, pero no forma parte del conjunto estándar de funciones JMESPath.