JSON Toolkit

JSONPath o JSON Pointer

En resumen: JSON Pointer es una dirección única que puedes guardar como clave; JSONPath es un lenguaje de consulta. Usar el equivocado rompe las actualizaciones de configuración o reinventa un JSONPath defectuoso.

Intermedio~4 min de lecturaPublicado el 2026-10-30Actualizado el 2026-10-30
Dónde termina JSONPath y dónde empieza JSON Pointer

En resumen: usa JSON Pointer cuando necesites leer, escribir o guardar la dirección de un nodo (por ejemplo, /server/cors/0), y JSONPath cuando necesites seleccionar un conjunto de nodos por condición; cualquier ruta persistida debería ser un Pointer, nunca una expresión.

Pregúntate si necesitas un nodo o un conjunto de ellos.

En una tabla

JSON Pointer JSONPath
Naturaleza Dirección única Expresión de consulta
Sintaxis /a/b/0 $.a.b[0], $..price
Resultado Exactamente un nodo, o ninguno Cero o más nodos
Almacenable como clave Sí, la cadena es la identidad No, puede coincidir con muchos
Estándar RFC 6901 RFC 9535 (finalizado en 2024)

JSON Pointer

/server/host        -> "127.0.0.1"
/server/cors/0      -> "https://a.com"
/                   -> the whole document

Las claves que contienen / o ~ se escapan: ~0 para ~, ~1 para /. El valor es el determinismo: la dirección es una cadena, así que cabe en una columna de base de datos, una línea de log o una clave de configuración. JSON Patch (RFC 6902) direcciona cada operación de esta forma.

JSONPath

$.store.book[*].author
$..price
$.store.book[?(@.price < 10)]

Más cercano al WHERE de SQL. La misma expresión devuelve cero, uno o cien nodos según los datos.

Dos modos de fallo

Usar JSONPath como clave de configuración. Guarda $.server.port y un día la estructura se convierte en un array; la expresión ahora coincide con varios puertos y la lógica de actualización no tiene forma de elegir.

Usar Pointer para seleccionar. «Encuentra todos los nodos cuyo precio sea inferior a 10» es imposible con un pointer. Escribir el bucle tú mismo significa construir un JSONPath parcial.

Cómo reparten el trabajo los sistemas reales

  • Lecturas de configuración, actualizaciones de campos, parches: Pointer, fijo y auditable
  • Exploración de datos, extracción masiva, informes: JSONPath, la expresividad primero
  • Cualquier cosa persistida: solo Pointer, nunca una expresión

FAQ

¿Cómo debo elegir entre JSON Pointer y JSONPath?

Pregúntate si necesitas un nodo o un conjunto. Usa JSON Pointer para leer o escribir un nodo concreto y para guardar esa dirección como clave, porque el pointer es único, por ejemplo /server/cors/0. Usa JSONPath para seleccionar nodos por condición, por ejemplo $.store.book[?(@.price < 10)].

¿Por qué no se puede usar una expresión JSONPath como clave de configuración?

Porque la expresión puede coincidir con varios nodos. Guarda $.server.port y un día la estructura se convierte en un array; la expresión entonces coincide con varios puertos y la lógica de actualización no puede decidir cuál cambiar. Cualquier cosa persistida o auditada necesita un Pointer.

¿Puede JSON Pointer filtrar nodos por condición?

No. Un pointer solo recorre una ruta fija y no tiene forma de saber qué nodos existen, así que seleccionar todos los nodos cuyo precio sea inferior a 10 es imposible. Escribir ese bucle tú mismo significa construir un JSONPath parcial.

Lectura adicional