d3.js объединяет два разных типа файла JSON с одинаковыми свойствами

1

Я запутался в объединении двух разных типов 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]
}

Как вы можете видеть, одно и то же свойство - это имя, поэтому я хочу использовать это имя для построения соединения и комбинировать 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.js

2 ответа

2
Лучший ответ

Этот вопрос не имеет ничего общего с 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
});

Это создаст новые свойства в объектах json1, основанных на json2.

Вот демо:

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);
  • 0
    Я думал о методе forEach, но меня смущает второй файл json с форматом. Теперь я полностью поняла. Спасибо сердечно, спас меня снова:>)
0
var first = [{"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 second = {
"SRI": [-122.18219, 37.45383],
"USCB": [-119.69819, 34.42083],
"UCLA": [-118.24368, 34.05223],
"UTAH": [-111.89105, 40.76078]
}

var res = first.map(d => {
    if(second[d.name]) {
    let arr = second[d.name];
    d.lat = arr[0];
    d.lom = arr[1];
  }
  else {
    d.lat = null;
    d.lon = null;
  }
  return d; 
});

console.log(res);

Рабочая скрипка: https://jsfiddle.net/GunnerSS/dvu0L463/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню