¿Forma estándar de hacer referencia a un objeto por identidad (por ejemplo, para referencias circulares)?

¿Existe 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 serializadas / cargadas?

Editar : Sé que es fácil hacer soluciones únicas (“hacer una lista de todos los nodos en el gráfico, luego …”). Me pregunto si existe una solución estándar y genérica para este problema.

Estuve buscando esta misma función recientemente. No parece haber una implementación estándar u omnipresente para hacer referencia en JSON. Encontré un par de recursos que puedo compartir:

  • El futuro para hacer referencia a JSON

http://groups.google.com/group/json-schema/browse_thread/thread/95fb4006f1f92a40 – Esta es solo una discusión sobre las 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 Dojo) – analiza las referencias basadas en id y en rutas.

  • JSONPath – XPath para JSON

http://goessner.net/articles/JsonPath/ – Esto parece ser un bash de establecer un estándar para la referenciación JSON basada en ruta – 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 tenga más suerte. Pero de nuevo, esto no está cerca de un estándar todavía.

Existe la especificación “Referencia JSON” , pero parece que no superó el estado de un borrador caducado de Internet.

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 u otra descripción de API).

Una referencia a un objeto en el mismo archivo se ve así: { "$ref": "#/definitions/Problem" } .

Douglas Crockford tiene una solución que usa JSONPath (una syntax similar a Xpath para describir las rutas json). Parece bastante sano:

https://github.com/douglascrockford/JSON-js/blob/master/cycle.js

No hay una manera canónica de lograr eso. JSON no tiene un soporte nativo para referencias, por lo que debe inventar su propio esquema para identificadores únicos que actuarán como punteros. Si realmente quiere hacerlo genérico, puede usar los identificadores de objeto proporcionados por su lenguaje de progtwigción (por ejemplo, object_id en Ruby o id(obj) en Python).