1

我想使用 json 对象创建一个邻接列表。我想以以下格式为邻接列表实现 json 对象。

var JSONobj= {node1:[{x1,y1},{x3,y3},{x4,y4}], node2:[{x2,y2},{x3,y3}], node3:[]}

我的疑问是,我是否可以动态地将值添加到坐标列表中,例如JSONobj.node3[0]={x4,y4}?或者有没有更好的方法从对象声明之外向 JSONobj 添加值?

4

3 回答 3

1

您可以将元素推送到 JSON 对象中,因为它只是一个漂亮的数组。

JSONobj.push({"newElement":"value"});
于 2011-08-26T09:16:37.130 回答
0

Javascript 中的 JSON是一个普通的(结构化的)Javascript 对象。因此,首先它必须遵守对象语法。node1,x1等必须是定义的变量或显式常量。{x1, x2}JS中没有定义。它必须是attribute: value,例如{x1: 1, "x2": "a2"}。只要你有一个语法有效的对象,你就可以随心所欲地操纵它。例如

var node1 = "node1";
var x1 = "x1";
var y1 = "y1";
var x3 = "x3";
var y3 = "y3";
var JSONobj= {node1: [{x1:1,y1:1}, {x3:2,y3:3}], 
    "node2": [{"x2":1,"y2":2}], "node3": []};
JSONobj.node3[0] = {"x4":4,"y4":4};   
JSONobj.node4 = [];
JSONobj.node4.push({"x5":5, "x6":6});

如果你想在 JS 外部使用这个对象(例如发送到服务器),你需要将它转换为 JSON 字符串:

var JSONtext = JSON.stringify(JSONobj);

如果要将 JSON 字符串转换为 JS 中的 JSON 对象,请使用:

var JSONobj = JSON.parse(JSONtext);
于 2011-08-26T10:24:11.853 回答
0

我在使用 JSON 实现邻接列表时遇到了一些问题。首先,我不能在 id:value 对中使用“整数值”作为 id。所以我重新考虑我的问题并以另一种方式接近,我实现了如下邻接列表(作为列表列表)。

当前解决方案

图的每个节点由它的笛卡尔坐标表示实际上是一种低级表示。在算法层面,我们需要为每个顶点关联一个唯一的数字;例如,您可以映射:

  • 顶点 0 ---> (100, 200)
  • 顶点 1 ---> (45, 78)
  • 顶点 2 ---> (198, 213)

我为所有顶点制作了一个列表:例如:nodes = [[100,200],[45,78],[198,213]]

其中nodes[1]给出了顶点 1 的坐标。

并且邻接表是列表列表的形式。

adj_list = [[1,2,3], [0, 4, 5] ]

adj_list[1]为您提供与 node1 相邻的节点列表。等等..

这意味着:与顶点 0 相邻(直接连接到),您有顶点 1、2、3。

与顶点 1 相邻,您有顶点 0、4、5 ...

我发现这个解决方案更适合我的问题。感谢 Dave 和 Jiri 的回复。

于 2011-09-01T08:54:27.090 回答