Ir al contenido principal
CuteJSON
↑↓ Navegar Enter Seleccionar Esc Cerrar

Como usar JSON Pointer, y que hacer cuando falla

Publicado 2 min de lectura Por Akash Kinkar Pandey

JSON Pointer, RFC 6901, es una pequena especificacion: cuatro paginas, una sintaxis, sin ambiguedad sobre lo que significa un camino. Aparece donde algo necesita referenciar una ubicacion exacta dentro de un documento JSON sin inventar su propio lenguaje de caminos, mas comunmente dentro de JSON Patch y la palabra clave $ref de JSON Schema.

La sintaxis, brevemente

Un pointer es una secuencia de tokens separados por /. /user/name significa la clave name dentro del objeto user. /items/0 significa el primer elemento del arreglo items. La cadena vacia, un pointer sin ningun token, significa todo el documento. Dos caracteres necesitan escape dentro de un token: ~1 representa un / literal, y ~0 representa un ~ literal, siempre leidos en ese orden para que ~01 signifique ~1 en lugar de /.

Usar el evaluador de JSON Pointer

Pega un documento, escribe un pointer, y presiona Resolver. Dado

{"a/b":{"c~d":42},"list":["x","y"]}

el pointer /a~1b/c~0d resuelve a traves de una clave que literalmente contiene una barra y una clave que literalmente contiene un tilde, devolviendo 42. Esa es toda la razon por la que existen los escapes: sin ellos, una clave que contiene el caracter separador seria imposible de direccionar.

Que te dice una busqueda fallida

La mayoria de las herramientas reportan un pointer fallido como un simple “no encontrado”, lo cual no es suficiente para corregirlo en un documento con mas de unas pocas claves. Este te dice hasta donde llego el pointer, que encontro ahi, y que claves tiene realmente el objeto. Pedir /a~1b/nope contra el mismo documento devuelve:

No hay clave “nope” en el objeto aqui, tiene cd. Resuelto hasta /a1b

Eso es suficiente para ver el error de escritura inmediatamente, en lugar de releer todo el documento para adivinar que salio mal.

El guion, y por que no resuelve

Dentro de JSON Patch, un guion como el ultimo token de un pointer hacia un arreglo significa “la posicion despues del ultimo elemento”, usado para agregar. Por si solo, resolver /items/- contra un documento no nombra un valor existente, porque aun no hay nada ahi a lo que apuntar. El evaluador explica esta distincion en lugar de tratarla como un error de parseo generico.

Donde esto difiere de JSONPath

JSON Pointer nombra una ubicacion y resuelve a exactamente un valor o falla. JSONPath es un lenguaje de consultas que puede coincidir con muchos valores a la vez, con comodines, filtros y porciones. Usa un pointer cuando ya sabes exactamente que valor quieres; usa JSONPath cuando estas buscando valores que coincidan con una condicion.

Volver a todas las entradas