Saltar al contenido
JSONCraft

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.

Por