2010-10-22 17 views
24

Esiste un modo standard per referenziare gli oggetti in base all'identità in JSON? Ad esempio, in modo che grafici e altre strutture dati con molti riferimenti (possibilmente circolari) possano essere opportunamente serializzati/caricati?Metodo standard di riferimento di un oggetto per identità (ad esempio, riferimenti circolari)?

Modifica: So che è facile fare soluzioni una tantum ("fare una lista di tutti i nodi nel grafico, quindi ..."). Mi chiedo se esiste una soluzione standard e generica a questo problema.

risposta

10

ero alla ricerca su questa stessa caratteristica di recente. Non sembra esserci un'implementazione standard o onnipresente per il riferimento in JSON. Ho trovato un paio di risorse che posso condividere:

  • Il futuro per JSON riferimento a

http://groups.google.com/group/json-schema/browse_thread/thread/95fb4006f1f92a40 - Questa è solo una discussione sul riferimento id-based.

  • JSON Riferimento in Dojo

http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ - Un'implementazione in Dojox (estensioni per il quadro Dojo) - discute id-based e percorso di riferimento sulla base.

  • JSONPath - XPath per JSON

http://goessner.net/articles/JsonPath/ - Questo sembra essere un tentativo di stabilire uno standard per il percorso base JSON riferimento - (?) Forse un piccolo sottoinsieme di XPath. Sembra che ci sia un'implementazione qui, ma ho continuato a ricevere errori nella sezione download: potresti avere più fortuna. Ma ancora una volta non è ancora vicino a uno standard.

2

Non esiste un modo canonico per raggiungere questo obiettivo. JSON non ha un supporto nativo per i riferimenti, quindi devi inventare il tuo schema per identificatori univoci che fungeranno da indicatori. Se si desidera renderlo generico, è possibile utilizzare gli identificatori oggetto forniti dal proprio linguaggio di programmazione (ad esempio object_id in Ruby o id(obj) in Python).

7

C'è lo "JSON Reference" specification, ma sembra che non abbia superato lo stato di una bozza Internet scaduta.

Ancora, sembra essere utilizzato in JSON Schema e Swagger (ora OpenAPI) (per riutilizzare parti di una descrizione dell'API in altri punti della stessa descrizione o un'altra API).

Un riferimento a un oggetto nello stesso file è simile a questo: { "$ref": "#/definitions/Problem" }.

Problemi correlati