javascript - d3.js 结合了两种具有相同属性的不同类型的 json 文件

标签 javascript json d3.js

我对组合两种不同类型的 json 文件感到困惑。 因为我想构建一个使用相同属性连接每个 json 文件的 json 文件。所有这些都是基于 d3.js 结构。

第一个json文件如下所示:

[{"status":"Active",
  "name":"public",
  "router:external":true,
  "original_status":"ACTIVE",
  "id":"dfc69b95-915f-475c-8800-db6c4e15c290"},
 {"status":"Active",
  "name":"UTAH",
  "router:external":false,
  "original_status":"ACTIVE",
  "id":"1b12abc7-6f69-493d-b95a-8fd9f8d15643"},
 {"status":"Active",
  "name":"USCB",
  "router:external":false,
  "original_status":"ACTIVE",
  "id":"5280be34-8e77-457c-856d-cd9776841cda"},
 {"status":"Active",
  "name":"UCLA",
  "router:external":false,
  "original_status":"ACTIVE",
  "id":"82d4cc54-471b-456e-8c28-da04226ee344"},
 {"status":"Active",
  "name":"SRI",
  "router:external":false,
  "original_status":"ACTIVE",
  "id":"e802c8fe-b30e-40c8-8f1d-fb8631bb0601"}
]

第二个json文件如下所示:

{
"SRI": [-122.18219, 37.45383],
"USCB": [-119.69819, 34.42083],
"UCLA": [-118.24368, 34.05223],
"UTAH": [-111.89105, 40.76078]
}

如你所见,相同的属性是name,所以我想用name建立连接并合并一个json文件,它有一个坐标属性。就像这样:

[{"status":"Active",
  "name":"public",

  "lot": null,
  "lat": null,

  "router:external":true,
  "original_status":"ACTIVE",
  "id":"dfc69b95-915f-475c-8800-db6c4e15c290"},
 {"status":"Active",
  "name":"UTAH",

  "lot":"-111",
  "lat":"40",

  "router:external":false,
  "original_status":"ACTIVE",
  "id":"1b12abc7-6f69-493d-b95a-8fd9f8d15643"},
....

你能告诉我如何实现这个吗?感谢您的所有想法。

最佳答案

这个问题与 D3 无关,您可以使用纯 JavaScript 来完成。

假设第一个JSON命名为json1,第二个命名为json2,你可以这样做:

json1.forEach(function(d){
    d.lat = json2[d.name] ? json2[d.name][1] : null;
    d.lon = json2[d.name] ? json2[d.name][0] : null
});

这将基于 json2json1 对象中创建新属性。

这是演示:

var json1 = [{
  "status": "Active",
  "name": "public",
  "router:external": true,
  "original_status": "ACTIVE",
  "id": "dfc69b95-915f-475c-8800-db6c4e15c290"
}, {
  "status": "Active",
  "name": "UTAH",
  "router:external": false,
  "original_status": "ACTIVE",
  "id": "1b12abc7-6f69-493d-b95a-8fd9f8d15643"
}, {
  "status": "Active",
  "name": "USCB",
  "router:external": false,
  "original_status": "ACTIVE",
  "id": "5280be34-8e77-457c-856d-cd9776841cda"
}, {
  "status": "Active",
  "name": "UCLA",
  "router:external": false,
  "original_status": "ACTIVE",
  "id": "82d4cc54-471b-456e-8c28-da04226ee344"
}, {
  "status": "Active",
  "name": "SRI",
  "router:external": false,
  "original_status": "ACTIVE",
  "id": "e802c8fe-b30e-40c8-8f1d-fb8631bb0601"
}];

var json2 = {
  "SRI": [-122.18219, 37.45383],
  "USCB": [-119.69819, 34.42083],
  "UCLA": [-118.24368, 34.05223],
  "UTAH": [-111.89105, 40.76078]
};

json1.forEach(function(d) {
  d.lat = json2[d.name] ? json2[d.name][1] : null;
  d.lon = json2[d.name] ? json2[d.name][0] : null
});

console.log(json1);

关于javascript - d3.js 结合了两种具有相同属性的不同类型的 json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44820137/

相关文章:

javascript - 当没有匹配项时,正则表达式性能不佳

javascript - Elastic Beanstalk 和 ES6

javascript - Annotator.js 从 json 加载注释

javascript - 将一个 csv 中的值添加到另一个 csv 中

d3.js - 使用 D3 时未出现附加文本

javascript - 扩展 angular.js 以自动将后缀附加到所有 templateURL 值

javascript - 显示开放时间算法javascript

android - 如何在 onPreExecute 停止异步任务?

javascript - 使用 Angular 搜索 JSON

javascript - 网格线正在重新创建并相互叠加