Resumen

  • RFC 9535 define la evaluación de una consulta JSONPath sobre un valor JSON particular y su resultado como una lista de cero o más nodos. Cada nodo tiene una única ruta normalizada dentro de ese valor.
  • $['approvals'][3] señala sin ambigüedad la cuarta aprobación de una instantánea. Si se inserta otra al principio, la misma cadena puede señalar a una persona distinta.
  • Lista vacía, JSON null, selecciones duplicadas e índice fuera de rango no significan lo mismo. Una decisión necesita un recibo que una entrada, consulta, implementación, resultado y política.

Una posición puede ser estable mientras el ocupante cambia.

A las 09:00, $['approvals'][3] encuentra la aprobación de Ana. Cinco minutos después se añade al principio una solicitud atrasada. La consulta sigue siendo válida y todavía devuelve un solo nodo, pero ahora encuentra la aprobación de Bruno. Si el sistema guardó únicamente la ruta, perdió la prueba de qué vio a las 09:00.

No hay contradicción con RFC 9535. Publicado en febrero de 2024 en la vía de estándares del IETF, el documento establece que JSONPath evalúa una consulta sobre un valor JSON —el argumento— y devuelve una lista de nodos. Cada nodo reúne un valor y su ubicación en esa entrada. La norma hace portátil la selección; no convierte la ubicación en identidad comercial ni autentica la fuente.

La normalización congela una coordenada

Una ruta normalizada usa corchetes y escapes canónicos para identificar exactamente un nodo. Cada nodo de un valor tiene una sola. Es una propiedad valiosa para pruebas, comparación de resultados, procesamiento posterior y eliminación explícita de duplicados.

El límite está en “un valor”. La ruta no contiene el hash del documento, su versión, procedencia, esquema o identificador estable. Hasta un índice negativo depende de la longitud real del array: la forma normalizada guarda la posición no negativa resuelta. Una variación de longitud puede romper la continuidad lógica.

JSON Pointer, RFC 6901, también localiza un valor en una estructura conocida, y una ruta normalizada puede convertirse en un puntero. La conversión cambia la notación, no crea permanencia.

Un resultado vacío no explica por qué

La lista vacía es un resultado válido. Un índice fuera de rango selecciona menos nodos y los segmentos posteriores continúan vacíos. No equivale a una consulta mal formada, un timeout, un límite de recursos o un rechazo del parser.

Tampoco equivale a JSON null: null es un valor presente; un miembro ausente no produce nodo. Si una regla de acceso aplana ambos casos en un falso genérico, el motor puede ser correcto y la política, incorrecta.

Las selecciones repetidas conservan duplicados. count() cuenta nodos, no valores, rutas o entidades de negocio únicas. Cuando la semántica permite varios órdenes, dos ejecuciones pueden devolver órdenes distintos y válidos. «Tomar el primero» pertenece a la aplicación salvo que otro contrato defina el orden.

Coincidir en la mecánica no acredita el significado

RFC 8259 define JSON y advierte sobre nombres de miembros duplicados; RFC 7493 reduce esa variabilidad mediante I-JSON. RFC 9485 hace portables las expresiones de match() y search(). El registro JSONPath de IANA registra extensiones y application/jsonpath identifica consultas.

Esos acuerdos ayudan a que dos sistemas seleccionen los mismos nodos de una entrada bien formada. No prueban que un campo owner sea dueño legal, que el dato esté vigente o que su emisor tenga autoridad. En RFC 9537, JSONPath localiza campos ocultos en una respuesta RDAP; no revela el valor ni demuestra la legitimidad de la política de ocultación.

La seguridad empieza antes de evaluar

RFC 9535 desaconseja entregar fragmentos arbitrarios al eval del lenguaje anfitrión. Los nombres, índices y valores interpolados deben validarse y escaparse. Una bajada recursiva ingenua también puede sufrir consumo extremo de CPU o desbordamiento de pila. Una gramática correcta necesita límites y un modo de fallo explícito.

RFC 3629 para UTF-8 y las consideraciones de modelo de RFC 8949 acotan la representación, no la autoridad. La evidencia completa enlaza bytes fuente, valor parseado, consulta, implementación y extensiones, lista de nodos, interpretación y decisión.

El recibo mínimo de una decisión

En control de acceso, cumplimiento, política de enrutamiento o respuesta a incidentes, conserve la entrada o su hash y procedencia; parser y tratamiento de nombres duplicados; consulta exacta y tipo de medio; variables antes y después de validar; implementación, versión y extensiones; límites de tiempo y recursos; rutas normalizadas y valores permitidos; deduplicación y orden aplicados después; esquema y versión de política; actor, hora y resultado.

Ese recibo permite afirmar que X ejecutó Q sobre el hash H bajo los límites L. Para afirmar que es el mismo registro de ayer hacen falta un ID estable de esquema y evidencia que enlace ambas versiones.

Fuentes y límites

El expediente oficial incluye HTML, texto, la ficha del RFC Editor, Datatracker, su historial y la búsqueda de erratas. El repositorio del grupo documenta el desarrollo y la comparación de JSONPath muestra el contexto de interoperabilidad.

También se consultaron RFC 8259, 7493, 9485, 6901, 8949, 3629 y 9537, el registro IANA y el tipo de medio. La lectura de gobernanza parte de los ensayos de Heng Lu sobre capas de realidad, especificación inicial mínima y primacía del código en ejecución.

No se auditó ninguna implementación, empresa, incidente o ataque concreto. El artículo no atribuye una vulnerabilidad a RFC 9535 ni un mal uso a una organización.