Стандартный способ ссылки на объект по идентичности (например, круговые ссылки)? - PullRequest
30 голосов
/ 23 октября 2010

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

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

Ответы [ 4 ]

11 голосов
/ 29 октября 2011

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

  • Будущее для ссылок JSON

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

  • Ссылки 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 (?).Кажется, здесь есть реализация, но я продолжал получать ошибки в разделе загрузки - возможно, вам повезет большеНо опять же, это еще не близко к стандарту.

9 голосов
/ 30 июля 2015

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

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

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

4 голосов
/ 16 мая 2011

У Дугласа Крокфорда есть решение, которое использует JSONPath (Xpath-подобный синтаксис для описания путей json).Это кажется довольно вменяемым:

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

1 голос
/ 23 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...