json - normas - para que son importantes las referencias bibliograficas
¿Manera estándar de referenciar un objeto por identidad(por ejemplo, referencias circulares)? (4)
¿Hay una forma estándar de referenciar objetos por identidad en JSON? Por ejemplo, ¿para que los gráficos y otras estructuras de datos con muchas referencias (posiblemente circulares) puedan ser serializados / cargados sanamente?
Edit : Sé que es fácil hacer soluciones únicas ("hacer una lista de todos los nodos en el gráfico, luego ..."). Me pregunto si hay una solución estándar, genérica, para este problema.
Douglas Crockford tiene una solución que utiliza JSONPath (una sintaxis similar a Xpath para describir las rutas json). Parece bastante sano:
https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
Estaba buscando en esta misma característica recientemente. No parece haber una implementación estándar o ubicua para la referencia en JSON. Encontré un par de recursos que puedo compartir:
- El futuro de las referencias a JSON
http://groups.google.com/group/json-schema/browse_thread/thread/95fb4006f1f92a40 : esto es solo una discusión sobre referencias basadas en ID.
- Referencia JSON en Dojo
http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ - Una implementación en Dojox (extensiones para el marco de trabajo de Dojo) - discute referencias basadas en id y basadas en ruta.
- JSONPath - XPath para JSON
http://goessner.net/articles/JsonPath/ : parece ser un intento de establecer un estándar para la referencia JSON basada en rutas: tal vez un pequeño subconjunto de XPath (?). Parece que hay una implementación aquí, pero seguí recibiendo errores en la sección de descargas; es posible que tengas más suerte. Pero, de nuevo, esto no es un estándar cercano.
Existe la especificación de "Referencia JSON" , pero parece que no superó el estado de un borrador de Internet vencido.
Aún así, parece que se usa en JSON Schema y Swagger (ahora OpenAPI) (para reutilizar partes de una descripción de API en otros lugares de la misma o en otra descripción de API).
Una referencia a un objeto en el mismo archivo se ve así: { "$ref": "#/definitions/Problem" }
.
No hay una forma canónica de lograrlo. JSON no tiene un soporte nativo para referencias, por lo que tiene que inventar su propio esquema para identificadores únicos que actuarán como punteros. Si realmente desea convertirlo en genérico, puede usar los identificadores de objeto proporcionados por su lenguaje de programación (por ejemplo, object_id
en Ruby o id(obj)
en Python).