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.

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.