Подтвердить что ты не робот

Стандартный способ ссылки на объект по идентичности (например, для круговых ссылок)?

Есть ли стандартный способ ссылки на объекты по идентификатору в JSON? Например, чтобы графы и другие структуры данных с большим количеством (возможно, круговых) ссылок могли быть сериализованы/загружены?

Изменить. Я знаю, что легко сделать одноразовые решения ( "составить список всех узлов в графе, затем..." ). Мне интересно, есть ли стандартное, общее, решение этой проблемы.

4b9b3361

Ответ 1

Недавно я искал эту функцию. Кажется, что стандартная или повсеместная реализация для ссылок в JSON не существует. Я нашел пару ресурсов, которыми я могу поделиться:

  • Будущее для привязки JSON

http://groups.google.com/group/json-schema/browse_thread/thread/95fb4006f1f92a40 - Это просто обсуждение ссылок на основе id.

  • JSON Ссылка в Dojo

http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ - реализация в Dojox (расширения для фреймворка Dojo) - обсуждает ссылки на основе на основе и на основе пути,

  • JSONPath - XPath для JSON

http://goessner.net/articles/JsonPath/ - Кажется, это попытка установить стандарт для ссылки на JSON на основе пути - возможно, небольшое подмножество XPath (?). Кажется, здесь есть реализация, но я продолжал получать ошибки в разделе загрузки - вам может быть повезло больше. Но опять же это не тот, где рядом со стандартом.

Ответ 2

Существует "Спецификация JSON Reference" , но, похоже, она не попала в состояние истекшего интернет-проекта.

Тем не менее, похоже, он используется в схеме JSON и Swagger (теперь OpenAPI) (для повторного использования частей описания API в других местах того же или другого описания API).

Ссылка на объект в том же файле выглядит следующим образом: { "$ref": "#/definitions/Problem" }.

Ответ 4

Канонического способа добиться этого не существует. JSON не имеет встроенной поддержки ссылок, поэтому вам нужно изобрести свою собственную схему для уникальных идентификаторов, которые будут выступать в качестве указателей. Если вы действительно хотите сделать его общим, вы можете использовать идентификаторы объектов, предоставленные вашим языком программирования (например, object_id в Ruby или id(obj) в Python).