如何将有向无环图(DAG)存储为JSON?

时间:2012-03-27 21:26:41

标签: json data-structures directed-acyclic-graphs

我想将DAG表示为JSON文本,并想知道是否有人尝试过此以及他们在验证JSON是否实际上是DAG方面遇到的任何问题。

3 个答案:

答案 0 :(得分:33)

标记每个节点并创建边缘列表。也就是说,对于每个节点,存储它具有边缘的节点,例如:

{
  "a": [ "b", "c", "d" ],
  "b": [ "d" ],
  "c": [ "d" ],
  "d": [ ]
}

您可以通过这种方式存储多种图形,而不仅仅是DAG,因此您需要对其进行后期处理以确保它没有循环。只需选择一个节点DFS,如果您多次看到任何节点它不是DAG。然后删除刚刚看到的所有节点,并重复其余任何节点。执行此操作直到找到循环或删除所有节点,在后一种情况下,图形是DAG。

请注意,这不会存储父节点,因为这是冗余信息。如果需要这些数据,可以在加载图表后生成这些数据。

答案 1 :(得分:4)

除非您使用自己的约定来表示链接数据,否则JSON没有表示DAG的本机工具。 JSON-LD(一个W3C提议)是一个JSON扩展,它试图做到这一点。该提案可在此处找到:http://json-ld.org/spec/latest/json-ld/

答案 2 :(得分:1)

严格来说,你无法直接使用JSON。您必须想出自己的方式来表示可以通过数据结构中的其他位置引用来识别的对象,然后您必须对反序列化JSON字符串的结果进行后处理。

由于JSON表达式 对象图的简单原因,你无法使用JSON,并且根本没有规定表达属性的值应该是值的概念数据结构中其他地方的另一个属性。换句话说,图中没有对象可以有多个父对象,这意味着每个对象都是另一个对象的一个​​属性的值。