- JSON Path es un lenguaje de consulta que puede usarse para extraer datos de documentos JSON
- Como OpenAPI es un documento JSON o YAML, se puede usar JSON Path para realizar varias tareas en OpenAPI
- Aplicar parches al documento con contenido adicional, ejemplos de código, etc., usando OpenAPI Overlay
- También puede usarse en Spectral para escribir reglas avanzadas
- También puede usarse en AWS Step Functions
- Cómo funciona JSON Path
- Navega y filtra la estructura de datos JSON, y extrae partes específicas
- Sintaxis similar a XPath (usado en XML)
- Ejemplo de sintaxis:
$.store.book[?@.price < 10].title
- Uso en OpenAPI
- Con el comando
jpp se puede consultar un documento OpenAPI y extraer partes específicas
- Se usa Overlay para modificar un documento OpenAPI o agregar información
- Actualizar descripciones, agregar información de contacto, etc.
- Quitar los servidores de desarrollo/staging de la lista de servidores y dejar solo producción
- Agregar información de un nuevo servidor sandbox, etc.
- Para aprender más sobre JSON Path
- En 2024 fue adoptado como estándar por el IETF (RFC 9535)
- Antes existían varias variantes, pero la tendencia es unificarse con la estandarización
- Es recomendable seguir la sintaxis de RFC 9535
Opinión de GN⁺
- JSON Path se está usando en cada vez más lugares, así que es una habilidad útil para conocer. En especial, parece que se volverá una habilidad esencial para desarrolladores o redactores técnicos que trabajen con OpenAPI.
- Aún hay algo de confusión porque la sintaxis de JSON Path no está totalmente unificada, pero parece recomendable tomar RFC 9535 como referencia. Se espera que las herramientas relacionadas sigan este estándar en adelante.
- Parece haber muchas áreas donde puede aprovecharse durante el proceso de desarrollo, como OpenAPI Overlay o Spectral. No solo sirve para extraer datos, también tiene mucho potencial para complementar, validar y depurar documentación.
- Eso sí, la sintaxis es algo compleja y hace falta estar familiarizado con JSON/YAML, así que existe cierta barrera de entrada. Lo mejor es empezar de forma simple e ir aprendiendo gradualmente las funciones avanzadas.
- Puede ser buena idea practicar con herramientas de línea de comandos como jq o yq. Usar herramientas integradas como Bump.sh también puede ayudar a la productividad.
2 comentarios
Gracias.
Comentarios de Hacker News
JSONata(https://jsonata.org) es una de las mejores herramientas para manipular JSON, usa sintaxis de JsonPath y además de seleccionar nodos ofrece funciones auxiliares para aritmética, comparación, ordenamiento, agrupación, manejo de fechas y agregación. Está escrita en JS, por lo que puede usarse en Node o en el navegador, y también tiene un wrapper para Python (https://pypi.org/project/pyjsonata/).
json_profile(https://github.com/tylerneylon/json_profile) es una herramienta que ayuda a entender rápidamente el esquema principal y la ubicación de los datos en archivos JSON nuevos, y resulta útil cuando los elementos pares de una lista tienen la misma estructura. Aprende la estructura del archivo, muestra las rutas agregadas más pesadas y ofrece pistas de tamaño por ruta.
espath(https://github.com/tomhodgins/espath) es una biblioteca para filtrar y encontrar datos en JSON usando XPath y selectores CSS. Funciona convirtiendo objetos JavaScript en un XML DOM, ejecutando consultas y luego volviéndolos a convertir en objetos, o bien manteniendo un registro del objeto original y buscando en él.
Hay una pregunta sobre si existe un nombre general para la estructura de datos que representa JSON, además de una mención sobre la necesidad de un lenguaje de rutas que funcione con estructuras similares como JSON, YAML, diccionarios de Python y TOML.
SQLite incluye en el núcleo de la base de datos un subconjunto de JSON Path, usado en funciones como json_extract(). Nota detallada relacionada: https://til.simonwillison.net/sqlite/json-extract-path
Insomnia y Bruno tienen funciones para filtrar respuestas usando JSON Path.
Se ha usado el soporte de jsonpath de PostgreSQL para crear reglas de filtrado personalizadas sobre filas de la base de datos.
Así como la inyección de XPATH fue ampliamente usada, se espera que los ataques de inyección de rutas JSON sean inevitables. (Ver https://owasp.org/www-community/attacks/XPATH_Injection)
Resulta extraño que no haya mención de herramientas similares como jq.
Es una lástima que existan demasiadas sintaxis de rutas JSON. jq, JSON path, AWS CLI y MySQL usan sintaxis distintas, así que es difícil desarrollar memoria muscular.