在JSON中是否有按标识引用对象的标准方法?例如,那么具有大量(可能是循环的)引用的图形和其他数据结构可以被理智地序列化/加载?
编辑:我知道做一次性解决方案很容易(“制作图表中所有节点的列表,然后......”)。我想知道是否有一个标准的,通用的解决方案来解决这个问题。
答案 0 :(得分:11)
我最近在搜索同一个功能。似乎没有用于JSON中引用的标准或无处不在的实现。我找到了几个可以分享的资源:
http://groups.google.com/group/json-schema/browse_thread/thread/95fb4006f1f92a40 - 这只是关于基于身份的引用的讨论。
http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ - Dojox中的一个实现(Dojo框架的扩展) - 讨论基于id和基于路径的引用。
http://goessner.net/articles/JsonPath/ - 这似乎是为基于路径的JSON引用建立标准的尝试 - 可能是XPath的一小部分(?)。这里似乎有一个实现,但我在下载部分一直出现错误 - 你可能会有更好的运气。但是,这还不是一个接近标准的地方。
答案 1 :(得分:9)
有"JSON Reference" specification,但似乎没有解决过期的互联网草案状态。
但它似乎在JSON Schema和Swagger(现在是OpenAPI)中使用(用于在相同或其他API描述的其他位置重用API描述的部分内容)。
对同一文件中对象的引用如下所示:{ "$ref": "#/definitions/Problem" }
。
答案 2 :(得分:4)
Douglas Crockford有一个使用JSONPath的解决方案(类似Xpath的语法来描述json路径)。看起来相当合理:
https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
答案 3 :(得分:1)
没有规范的方法来实现这一目标。 JSON没有对引用的本机支持,因此您必须为唯一标识符创建自己的方案,这些标识符将充当指针。如果你真的想让它变得通用,你可以使用编程语言提供的对象标识符(例如Ruby中的object_id
或Python中的id(obj)
)。