用JSON表示图形

问题描述 投票:4回答:2

this问题的启发,我试图用JSON代表DAG。我的案例包括包含一些数据的边和节点(而不仅仅是本例中的字符串)。我在考虑这样的规范:

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

    "nodes": {
        "a": {
            "name": "Adam"
        },
        "b": {
            "name": "Bob"
        },
        "c": {
            "name": "Caillou"
        }
    },

    "edges": {
        // how to do the same for edges?
        // ie: how to query edges ?
    }
}

我的一个想法是使边的键是它连接的两个顶点id的串联。例如,abacbc是此图中的三条边。我想知道是否有更标准的方法来做到这一点。

编辑:这就是我现在想的

{
    "graph": {
        "a": {
            "data": {
                // a's vertex data
            },
            "neighbors": {
                "b": {
                    "data": {
                        // data in edge ab
                    }
                },
                "c": {
                    "data": {
                        // data in edge ac
                    }
                }
            }
        },
        "b": {
            "data": {
                // b's vertex data
            },
            "neighbors": {
                "c": {
                    "data": {
                        // data in edge bc
                    }
                }
            }
        },
        "c": {
            "data": {
                // c's vertex data
            }
        }
    }
}
json data-structures graph directed-acyclic-graphs
2个回答
7
投票

由于DAG的边缘保存数据,因此它们最好拥有自己的标识符,就像节点一样。也就是说,json表示应该由三个组成部分组成:

  1. 节点记录:将每个节点标识符映射到节点的数据。
  2. 边缘记录:将每个边缘标识符映射到边缘的数据。
  3. 邻接列表:将每个节点标识符映射到边缘标识符阵列,每个边缘标识符对应于从节点出来的边缘。 DAG = { "adjacency": { "a": ["1", "2"], "b": ["3"] }, "nodes": { "a": { // data }, "b": { // data }, "c": { // data } }, "edges": { "1": { "from": "a", "to": "b", "data": { // data } }, "2": { "from": "a", "to": "b", "data": { // data } }, "3": { "from": "b", "to": "c", "data": { // data } } } }

3
投票

事实证明,有些标准正试图出现在这类事情上。我最近不得不为自己的项目看一下这些。例如,您可能对http://jsongraphformat.info/感兴趣,或者它在其网站上引用的同行项目之一。目标包括尝试在JSON中表示您可以用DOT语言表示的任何内容(https://en.wikipedia.org/wiki/DOT_(graph_description_language))。

© www.soinside.com 2019 - 2024. All rights reserved.