ToolDeck

Evaluador JSONPath

Prueba expresiones JSONPath sobre datos JSON y visualiza los resultados coincidentes

Prueba un ejemplo

Entrada JSON

Resultados

Se ejecuta localmente · Es seguro pegar secretos
Los resultados aparecerán aquí…

¿Qué es JSONPath?

JSONPath es un lenguaje de consulta para extraer valores de documentos JSON. Propuesto originalmente por Stefan Goessner en 2007 como análogo a XPath para XML, JSONPath permite escribir expresiones como $.store.book[*].author para seleccionar todos los campos de autor dentro de un array de libros sin escribir bucles ni código de recorrido manual. El lenguaje fue estandarizado en febrero de 2024 como RFC 9535, publicado por el IETF.

Una expresión JSONPath siempre comienza con $ que representa la raíz del documento. A partir de ahí se encadenan selectores: notación de punto para claves de objetos, notación de corchetes para índices de arrays, comodines para todos los hijos, y el operador de descenso recursivo (..) para buscar en cada nivel del anidamiento. Las expresiones de filtro como [?(@.price < 10)] permiten seleccionar elementos según condiciones evaluadas sobre sus valores.

JSONPath se usa en herramientas de prueba de APIs como Postman, plataformas de observabilidad como Datadog y Splunk, motores de flujos de trabajo como Apache NiFi, y bibliotecas de programación en JavaScript, Python, Go, Java y C#. Probar las expresiones sobre datos reales antes de integrarlas en código o archivos de configuración evita fallos silenciosos cuando la estructura JSON no coincide con las suposiciones.

¿Por qué usar este Evaluador JSONPath?

Escribir expresiones JSONPath a mano es propenso a errores. Un punto faltante, el tipo de corchete incorrecto o una sintaxis de filtro errónea pueden devolver resultados vacíos sin ningún mensaje de error. Esta herramienta te ofrece retroalimentación visual inmediata sobre lo que coincide con tu expresión.

Resultados Instantáneos
Pega el JSON, escribe una expresión y observa cómo los valores coincidentes se actualizan en tiempo real. No es necesario ejecutar un script ni recargar la página para comprobar tu consulta.
🔒
Privacidad ante todo
Toda la evaluación se ejecuta en tu navegador. Tus datos JSON nunca salen de tu dispositivo, por lo que puedes probar expresiones de forma segura sobre respuestas de API en producción o archivos de configuración que contengan credenciales.
📋
Copia los Resultados Directamente
Copia el resultado coincidente como JSON con un clic. Pégalo en aserciones de pruebas, documentación o ejemplos de respuesta de API sin necesidad de reformatearlo.
🛠️
Sin Configuración Previa
No hay paquetes npm que instalar ni entornos virtuales de Python que crear. Abre la página, pega tus datos y empieza a consultar. Funciona en cualquier dispositivo con un navegador.

Casos de Uso de JSONPath

Desarrollo Frontend
Extrae exactamente los valores anidados que necesitas de las respuestas de la API antes de conectarlos al estado de React o a las propiedades computadas de Vue. Prueba primero tus expresiones de ruta sobre el payload real de la API.
Pruebas de API Backend
Postman y REST-assured usan JSONPath para verificar los cuerpos de las respuestas. Construye y valida tus expresiones de aserción aquí antes de copiarlas a los scripts de prueba, reduciendo los ciclos de depuración.
Configuración DevOps
Las definiciones de recursos personalizados de Kubernetes, AWS Step Functions y las fuentes de datos de Terraform aceptan expresiones JSONPath para extraer valores de salidas JSON. Valida tu ruta antes de desplegar.
Automatización de QA
Escribe aserciones basadas en JSONPath para pruebas de contrato y de integración. Verifica que tus expresiones coincidan correctamente con los valores esperados cuando la estructura JSON tenga campos opcionales o anulables.
Extracción en Pipelines de Datos
Apache NiFi, Logstash y scripts ETL personalizados usan JSONPath para extraer campos de datos de registro semiestructurados y flujos de eventos. Prueba las expresiones sobre payloads de muestra antes del despliegue del pipeline.
Aprendizaje y Experimentación
Estudiantes y desarrolladores que se inician en JSONPath pueden probar diferentes expresiones sobre JSON de ejemplo para entender cómo funcionan los comodines, el descenso recursivo y los filtros sin necesidad de un entorno local.

Referencia de Sintaxis JSONPath

RFC 9535 define la sintaxis estándar de JSONPath. La tabla siguiente cubre los operadores que usarás en la mayoría de las consultas. Todas las expresiones comienzan con $ (el nodo raíz) y encadenan uno o más selectores para navegar por la estructura del documento.

OperadorDescripciónEjemplo
$Root element$.store
.keyChild property$.store.book
[n]Array index (zero-based)$.store.book[0]
[*]All elements in array/object$.store.book[*]
..Recursive descent$..author
[start:end]Array slice$.store.book[0:2]
[?()]Filter expression$.store.book[?(@.price<10)]
@Current node (inside filter)$.store.book[?(@.isbn)]

JSONPath vs jq vs XPath

JSONPath, jq y XPath resuelven el mismo problema (consultar datos estructurados) para diferentes formatos y casos de uso. JSONPath apunta a JSON y está disponible como biblioteca en la mayoría de los lenguajes. jq es una herramienta CLI independiente con su propio lenguaje de filtros Turing-completo. XPath opera sobre XML y forma parte del stack de especificaciones del W3C.

CaracterísticaJSONPathjqXPath
Formato de datosJSONJSONXML
Acceder al primer elemento$.store.book[0].store.book[0]/store/book[1]
Búsqueda recursiva$..price.. | .price?//price
Expresión de filtro[?(@.price<10)]select(.price < 10)[price<10]
EspecificaciónRFC 9535stedolan.github.ioW3C XPath 3.1

Ejemplos de Código

Cómo evaluar expresiones JSONPath en los lenguajes y herramientas más populares. Cada ejemplo usa la misma estructura JSON de librería para facilitar la comparación.

JavaScript (jsonpath-plus)
import { JSONPath } from 'jsonpath-plus';

const data = {
  store: {
    book: [
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Great Gatsby', price: 12.99 }
    ]
  }
};

// Get all book titles
JSONPath({ path: '$.store.book[*].title', json: data });
// → ['Moby Dick', 'The Great Gatsby']

// Recursive descent — find every price in the document
JSONPath({ path: '$..price', json: data });
// → [8.99, 12.99]

// Filter — books under $10
JSONPath({ path: '$.store.book[?(@.price < 10)]', json: data });
// → [{ title: 'Moby Dick', price: 8.99 }]
Python (jsonpath-ng)
from jsonpath_ng.ext import parse
import json

data = {
    "store": {
        "book": [
            {"title": "Moby Dick", "price": 8.99},
            {"title": "The Great Gatsby", "price": 12.99}
        ]
    }
}

# Get all book titles
expr = parse("$.store.book[*].title")
titles = [match.value for match in expr.find(data)]
# → ['Moby Dick', 'The Great Gatsby']

# Recursive descent — all prices
expr = parse("$..price")
prices = [match.value for match in expr.find(data)]
# → [8.99, 12.99]

# Filter — books under $10
expr = parse("$.store.book[?price < 10]")
cheap = [match.value for match in expr.find(data)]
# → [{"title": "Moby Dick", "price": 8.99}]
Go (ohler55/ojg)
package main

import (
    "fmt"
    "github.com/ohler55/ojg/jp"
    "github.com/ohler55/ojg/oj"
)

func main() {
    src := `{
        "store": {
            "book": [
                {"title": "Moby Dick", "price": 8.99},
                {"title": "The Great Gatsby", "price": 12.99}
            ]
        }
    }`

    obj, _ := oj.ParseString(src)

    // Get all book titles
    expr, _ := jp.ParseString("$.store.book[*].title")
    results := expr.Get(obj)
    fmt.Println(results)
    // → [Moby Dick The Great Gatsby]

    // Recursive descent — all prices
    expr2, _ := jp.ParseString("$..price")
    fmt.Println(expr2.Get(obj))
    // → [8.99 12.99]
}
CLI (jq alternative syntax)
# jq uses its own syntax, not JSONPath, but solves the same problem.
# Mapping common JSONPath patterns to jq:

# $.store.book[*].title → get all titles
echo '{"store":{"book":[{"title":"Moby Dick"},{"title":"Gatsby"}]}}' | \
  jq '.store.book[].title'
# → "Moby Dick"
# → "Gatsby"

# $..price → recursive descent for "price" keys
echo '{"a":{"price":1},"b":{"price":2}}' | \
  jq '.. | .price? // empty'
# → 1
# → 2

# Filter: books where price < 10
echo '{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}' | \
  jq '.store.book[] | select(.price < 10)'
# → {"title":"A","price":8}

Preguntas Frecuentes

¿Cuál es la diferencia entre JSONPath y jq?
JSONPath es un lenguaje de consulta diseñado para integrarse en aplicaciones como biblioteca. Devuelve valores coincidentes de un documento JSON mediante expresiones de ruta. jq es una herramienta de línea de comandos independiente con un lenguaje de programación completo para transformar JSON, incluyendo condicionales, funciones e interpolación de cadenas. Usa JSONPath cuando necesites una consulta integrada en código o en una herramienta como Postman. Usa jq para transformaciones de datos ad-hoc desde la línea de comandos.
¿JSONPath es un estándar oficial?
Sí. El IETF publicó RFC 9535 ("JSONPath: Query Expressions for JSON") en febrero de 2024. Antes de eso, JSONPath existía solo como una especificación informal de Stefan Goessner de 2007, lo que generó inconsistencias entre implementaciones. RFC 9535 define la sintaxis, la semántica y un formato de normalización para la interoperabilidad.
¿Cómo funciona el descenso recursivo (..) en JSONPath?
El operador de descenso recursivo (..) busca en cada nivel del documento JSON la clave que le sigue. Por ejemplo, $..price devuelve todos los valores asociados a la clave "price" sin importar cuán profundo estén anidados. Es equivalente a un recorrido en profundidad que recoge los nodos coincidentes. Ten en cuenta que en documentos grandes, el descenso recursivo puede devolver muchos resultados y ser más lento que una ruta directa.
¿Puede JSONPath modificar datos JSON?
No. JSONPath es un lenguaje de consulta de solo lectura. Selecciona y devuelve valores, pero no puede insertar, actualizar ni eliminar nodos. Para modificar JSON basándose en una expresión JSONPath, debes usar las funciones de manipulación JSON de tu lenguaje de programación después de la consulta. Algunas bibliotecas como jsonpath-ng en Python ofrecen un método set() sobre los objetos de coincidencia, pero esto es una extensión de la biblioteca, no forma parte de la especificación JSONPath.
¿Qué significa el símbolo @ en las expresiones de filtro de JSONPath?
El símbolo @ hace referencia al nodo actual que se está evaluando en una expresión de filtro. En $.store.book[?(@.price < 10)], el filtro itera sobre cada elemento del array book, y @ representa cada objeto libro en cada iteración. @.price accede al campo price del libro actual. Sin @, el filtro no sabría qué propiedades del nodo verificar.
¿Cómo manejo claves con caracteres especiales o espacios en JSONPath?
Usa notación de corchetes con comillas: $['store']['book title']. La notación de corchetes funciona para cualquier clave, incluyendo las que tienen puntos, espacios o caracteres Unicode. La notación de punto ($.store.key) solo funciona para claves que son identificadores válidos (letras, dígitos, guiones bajos). RFC 9535 requiere que las implementaciones soporten tanto la notación de corchetes con comillas simples como con comillas dobles.
¿Por qué mi expresión JSONPath devuelve resultados vacíos?
Las causas más comunes son: un error tipográfico en el nombre de una clave (JSONPath distingue mayúsculas de minúsculas), usar notación de punto para una clave que contiene caracteres especiales, omitir el símbolo $ raíz al inicio, o asumir que un valor es un array cuando es un objeto único. Pega tu JSON en un evaluador y prueba primero sub-expresiones más simples (como $.store) para verificar que cada segmento de tu ruta se resuelve correctamente antes de agregar más selectores.