2010-10-22 14 views
24

¿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 serializadas/cargadas?¿Forma estándar de hacer referencia a un objeto por identidad (por ejemplo, para referencias circulares)?

Editar: Sé que es fácil hacer soluciones puntuales ("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.

Respuesta

10

yo estaba buscando en esta misma característica recientemente. No parece haber una implementación estándar u omnipresente para hacer referencia en JSON. He encontrado un par de recursos que puedo compartir:

  • El futuro de JSON que hacen referencia a

http://groups.google.com/group/json-schema/browse_thread/thread/95fb4006f1f92a40 - Esto es sólo una discusión sobre la referencia basada en ID.

  • JSON en referencia a Dojo

http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ - Una implementación en Dojox (extensiones para el marco Dojo) - discute referencia basada basada en ID y la ruta.

  • JSONPath - XPath para JSON

http://goessner.net/articles/JsonPath/ - Este parece ser un intento de establecer un estándar para la ruta basada referencia JSON - (?) 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.

2

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 programación (por ejemplo, object_id en Ruby o id(obj) en Python).

7

Está el "JSON Reference" specification, 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).

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

Cuestiones relacionadas