¿Alguna vez te has encontrado buscando en una respuesta JSON masiva, tratando de encontrar esa única pieza de datos que necesitas? Si es así, entonces sabes que puede ser un poco como buscar una aguja en un pajar. Presentamos JSONPath: una pequeña herramienta ingeniosa que puede hacer tu vida mucho más fácil al tratar con datos JSON en las APIs.
¿Qué es JSONPath?
JSONPath es un lenguaje de consulta para JSON, similar a XPath para XML. Te permite navegar y extraer partes específicas de tus datos JSON utilizando una sintaxis simple e intuitiva. Piensa en ello como una forma de ejecutar consultas en tus datos JSON y obtener exactamente lo que necesitas sin tener que examinar toda la respuesta.
¿Por qué usar JSONPath?
Imagina que tienes una enorme respuesta JSON de una API; todo lo que necesitas es el valor de un campo específico anidado en lo profundo. Sin JSONPath, normalmente tendrías que escribir un montón de código para analizar el JSON, lo que puede ser tedioso y propenso a errores. JSONPath simplifica esto al permitirte especificar exactamente lo que quieres extraer, haciendo que tu código sea más limpio y fácil de mantener.
¿Cómo funciona JSONPath?
JSONPath utiliza una sintaxis similar a la notación de objetos de JavaScript, con algunas características añadidas para consultas más complejas. Aquí tienes un resumen rápido de la sintaxis básica:
$
: Representa el objeto o array raíz..
o[]
: Operador hijo; se utiliza para acceder a una propiedad del objeto o a un elemento del array.*
: Comodín; coincide con todos los elementos o campos...
: Descenso recursivo; busca nodos coincidentes en cualquier nivel.?()
: Aplica un filtro (la expresión debe evaluarse como verdadera).()
: Expresión de script, utilizando el motor de script subyacente.
Profundicemos en algunos ejemplos para ver JSONPath en acción.
Ejemplos básicos de JSONPath
Considera los siguientes datos JSON de una API de base de datos de películas:
{
"movies": {
"action": [
{ "title": "Mad Max: Fury Road", "director": "George Miller", "year": 2015, "rating": 8.1 },
{ "title": "John Wick", "director": "Chad Stahelski", "year": 2014, "rating": 7.4 }
],
"drama": [
{ "title": "The Shawshank Redemption", "director": "Frank Darabont", "year": 1994, "rating": 9.3 },
{ "title": "Forrest Gump", "director": "Robert Zemeckis", "year": 1994, "rating": 8.8 }
],
"comedy": [
{ "title": "The Grand Budapest Hotel", "director": "Wes Anderson", "year": 2014, "rating": 8.1 }
]
}
}
Extracción de todas las películas de acción:
$.movies.action[*]
Esto te dará un array de todos los objetos de películas de acción.
Extracción de los títulos de todas las películas de drama:
$.movies.drama[*].title
Esto devolverá un array de los títulos de todas las películas de drama: ["The Shawshank Redemption", "Forrest Gump"]
.
Extracción de la calificación de "Mad Max: Fury Road":
$.movies.action[?(@.title == "Mad Max: Fury Road")].rating
Esto devolverá la calificación de "Mad Max: Fury Road": 8.1
.
Búsqueda de todas las películas estrenadas en 2014:
$.movies..[?(@.year == 2014)]
Esto devolverá todas las películas estrenadas en 2014, que en este caso son: ["John Wick", "The Grand Budapest Hotel"]
.
JSONPath en las APIs
Usar JSONPath en las APIs es increíblemente útil cuando quieres extraer información específica de una respuesta JSON. Muchos lenguajes de programación y herramientas tienen bibliotecas que soportan JSONPath, lo que facilita su integración en tus proyectos.
Por ejemplo, en Javascript, puedes usar la biblioteca jsonpath
:
const jsonpath = require('jsonpath');
// Sample JSON data
const data = {
movies: {
action: [
{ title: "Mad Max: Fury Road", director: "George Miller", year: 2015, rating: 8.1 },
{ title: "John Wick", director: "Chad Stahelski", year: 2014, rating: 7.4 }
],
drama: [
{ title: "The Shawshank Redemption", director: "Frank Darabont", year: 1994, rating: 9.3 },
{ title: "Forrest Gump", director: "Robert Zemeckis", year: 1994, rating: 8.8 }
],
comedy: [
{ title: "The Grand Budapest Hotel", director: "Wes Anderson", year: 2014, rating: 8.1 }
]
}
};
// Extracting titles of all drama movies
const titles = jsonpath.query(data, '$.movies.drama[*].title');
console.log(titles); // Output: ["The Shawshank Redemption", "Forrest Gump"]
De manera similar, en Python, puedes usar la biblioteca jsonpath-ng
:
from jsonpath_ng import jsonpath, parse
# Sample JSON data
data = {
"movies": {
"action": [
{"title": "Mad Max: Fury Road", "director": "George Miller", "year": 2015, "rating": 8.1},
{"title": "John Wick", "director": "Chad Stahelski", "year": 2014, "rating": 7.4}
],
"drama": [
{"title": "The Shawshank Redemption", "director": "Frank Darabont", "year": 1994, "rating": 9.3},
{"title": "Forrest Gump", "director": "Robert Zemeckis", "year": 1994, "rating": 8.8}
],
"comedy": [
{"title": "The Grand Budapest Hotel", "director": "Wes Anderson", "year": 2014, "rating": 8.1}
]
}
}
# Extracting titles of all drama movies
jsonpath_expr = parse('$.movies.drama[*].title')
titles = [match.value for match in jsonpath_expr.find(data)]
print(titles) # Output: ["The Shawshank Redemption", "Forrest Gump"]
Usando JSONPath en Apidog

Apidog es una herramienta versátil diseñada para simplificar el proceso de trabajar con APIs, y soporta JSONPath de forma nativa.

Aquí te mostramos cómo Apidog puede ayudarte a aprovechar el poder de JSONPath de manera efectiva:
Primero, necesitarás enviar solicitudes a tus APIs y ver las respuestas directamente con Apidog. Luego puedes usar la interfaz proporcionada para aplicar una consulta JSONPath para extraer los títulos de todas las películas de acción de la respuesta.

De la captura de pantalla anterior, verás que (1) enviamos una solicitud GET
a nuestro servidor - Creé un servidor express simple usando los datos JSON que obtuvimos arriba como respuesta. Luego cambié a la pestaña Post Processors (2), y agregué un nuevo proceso - Extract Variable
(3).
Al hacer clic en Extract Variable
, se te mostrará la siguiente página;

Puedes establecer un nombre de variable (1) si quieres. Las variables son útiles si quieres monitorear o construir diferentes APIs y necesitas un solo lugar para administrar la configuración general. Las variables aquí son como archivos .env
.
El otro paso es escribir el JSONPath que quieres filtrar (2). En nuestro caso aquí, queremos obtener los títulos de las películas en el array de acción de nuestro JSON. Una vez que escribas la ruta actualmente, haz clic en el botón de flecha (3) para abrir la página de respuesta de la consulta como se muestra a continuación.

Como puedes ver en la respuesta anterior, Apidog filtró los títulos de las películas en el array de acción y nos los mostró.
Si quieres probar esto, entonces asegúrate de descargar e instalar Apidog y enviar tu primera solicitud con él.
Conclusión
JSONPath es una herramienta invaluable para navegar y extraer datos de respuestas JSON en APIs. Simplifica el proceso de trabajar con estructuras JSON complejas, haciendo que tu flujo de trabajo de desarrollo sea más eficiente. Al integrar JSONPath con herramientas como Apidog, puedes filtrar y recuperar fácilmente los datos exactos que necesitas, mejorando tus procesos de prueba y depuración de APIs. Ya sea que estés extrayendo títulos de películas, filtrando registros específicos o validando respuestas, JSONPath ofrece una forma clara y concisa de manejar datos JSON. Pruébalo en tu próximo proyecto y experimenta la simplicidad optimizada que aporta.