Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将json作为子文档合并到另一个json中_Javascript_Json - Fatal编程技术网

Javascript 将json作为子文档合并到另一个json中

Javascript 将json作为子文档合并到另一个json中,javascript,json,Javascript,Json,我希望合并两个json文件,使第二个json中匹配的stop\u id作为子文档嵌套在第一个json中 这就是我的意思: first.json:例如,这是一个包含火车站的json文件。每个都有一个stop\u id字段 [ { "stop_id":70021, "stop_name":"CALTRAIN - 22ND ST STATION", "stop_lat":37.757692, "stop_lon":-122.392318, "zone_id"

我希望合并两个json文件,使第二个json中匹配的
stop\u id
作为子文档嵌套在第一个json中

这就是我的意思:

first.json:例如,这是一个包含火车站的json文件。每个都有一个
stop\u id
字段

[
  {
    "stop_id":70021,
    "stop_name":"CALTRAIN - 22ND ST STATION",
    "stop_lat":37.757692,
    "stop_lon":-122.392318,
    "zone_id":3329
  },
  {
    "stop_id":70022,
    "stop_name":"CALTRAIN - 22ND ST STATION",
    "stop_lat":37.757692,
    "stop_lon":-122.392318,
    "zone_id":3329
  },
  {
    "stop_id":70151,
    "stop_name":"CALTRAIN - ATHERTON STATION",
    "stop_lat":37.464458,
    "stop_lon":-122.198152,
    "zone_id":3331
  }]
second.json:通过
stop\u id

[
  {
    "trip_id":"RTD8997283",
    "arrival_time":"05:40:00",
    "departure_time":"05:40:00",
    "stop_id":70021,
    "stop_sequence":1
  },
  {
    "trip_id":"RTD8997283",
    "arrival_time":"05:52:00",
    "departure_time":"05:52:00",
    "stop_id":70021,
    "stop_sequence":2
  },
  {
    "trip_id":"RTD8449096",
    "arrival_time":"07:33:00",
    "departure_time":"07:33:00",
    "stop_id":70022,
    "stop_sequence":1
  }]
我想合并这些文档,使second.json中匹配的
stop\u id
s嵌套在first.json中的
stop\u id
文档下面。例如,合并的最终结果如下所示:

merged.json

[{
    "stop_id": 70021,
    "stop_name": "CALTRAIN - 22ND ST STATION",
    "stop_lat": 37.757692,
    "stop_lon": -122.392318,
    "zone_id": 3329,
    "trip": [{
        "trip_id": "RTD8997283",
        "arrival_time": "05:40:00",
        "departure_time": "05:40:00",
        "stop_id": 70021,
        "stop_sequence": 1
    }, {
        "trip_id": "RTD8997283",
        "arrival_time": "05:52:00",
        "departure_time": "05:52:00",
        "stop_id": 70021,
        "stop_sequence": 2
    }]
}, {
    "stop_id": 70022,
    "stop_name": "CALTRAIN - 22ND ST STATION",
    "stop_lat": 37.757692,
    "stop_lon": -122.392318,
    "zone_id": 3329,
    "trip": [{
        "trip_id": "RTD8449096",
        "arrival_time": "07:33:00",
        "departure_time": "07:33:00",
        "stop_id": 70022,
        "stop_sequence": 1
    }]
}, {
    "stop_id": 70151,
    "stop_name": "CALTRAIN - ATHERTON STATION",
    "stop_lat": 37.464458,
    "stop_lon": -122.198152,
    "zone_id": 3331
}]

对于大型数据集,是否可以通过javascript或任何其他方法进行此类合并?

您可以尝试以下方法:

var stnList=[{“stop_id”:70021,“stop_name”:“CALTRAIN-22 ST STATION”,“stop_lat”:37.757692,“stop_lon”:-122.392318,“zone_id”:3329},{“stop_id”:70022,“stop_name”:“CALTRAIN-22 ST STATION”,“stop_lat”:37.757692,“stop_lon”:-122.392318,“zone_id”:3329},{“stop_id”:70151,“stop_name”:“CALTRAIN-ATHERTON STATION”,“stop_lat”:37.464458,“stop_lon”:-122.198152,“zone_id”:3331});
var travelList=[{“行程id”:“RTD8997283”,“到达时间”:“05:40:00”,“出发时间”:“05:40:00”,“停车id”:70021,“停车顺序”:1},{“行程id”:“RTD8997283”,“到达时间”:“05:52:00”,“出发时间”:“05:52:00”,“停车id”:70021,“停车顺序”:2},{“行程id”:“RTD8449096”,“到达时间”:“07:33:00”,“出发时间”“:“07:33:00”,“停止id”:70022,“停止顺序”:1}]
travelList.forEach(函数(t){
//查找对象
var\u stn=stnList.find(函数(stn){
返回stn.stop\u id==t.stop\u id
});
//检查是否定义了行程属性
如果(!\u stn.trip)\u stn.trip=[];
_标准行程推送(t);
});

document.write(“+JSON.stringify(stnList,0,4)+”)您可以尝试以下方法:

first.forEach(function (val, index, theArray) {
   val.trip = [];
   second.forEach(function (val2, index, theArray) {
       if(val2.stop_id === val.stop_id){
           val.trip.push(val2);
       }
   });    
});

console.log(first);
var stnList=[{“stop_id”:70021,“stop_name”:“CALTRAIN-22 ST STATION”,“stop_lat”:37.757692,“stop_lon”:-122.392318,“zone_id”:3329},{“stop_id”:70022,“stop_name”:“CALTRAIN-22 ST STATION”,“stop_lat”:37.757692,“stop_lon”:-122.392318,“zone_id”:3329},{“stop_id”:70151,“stop_name”:“CALTRAIN-ATHERTON STATION”,“stop_lat”:37.464458,“stop_lon”:-122.198152,“zone_id”:3331});
var travelList=[{“行程id”:“RTD8997283”,“到达时间”:“05:40:00”,“出发时间”:“05:40:00”,“停车id”:70021,“停车顺序”:1},{“行程id”:“RTD8997283”,“到达时间”:“05:52:00”,“出发时间”:“05:52:00”,“停车id”:70021,“停车顺序”:2},{“行程id”:“RTD8449096”,“到达时间”:“07:33:00”,“出发时间”“:“07:33:00”,“停止id”:70022,“停止顺序”:1}]
travelList.forEach(函数(t){
//查找对象
var\u stn=stnList.find(函数(stn){
返回stn.stop\u id==t.stop\u id
});
//检查是否定义了行程属性
如果(!\u stn.trip)\u stn.trip=[];
_标准行程推送(t);
});

document.write(“+JSON.stringify(stnList,0,4)+”)在普通Javascript中,可以使用临时对象引用目标项,并将所有行程推送到另一个循环中

first.forEach(function (val, index, theArray) {
   val.trip = [];
   second.forEach(function (val2, index, theArray) {
       if(val2.stop_id === val.stop_id){
           val.trip.push(val2);
       }
   });    
});

console.log(first);
此解决方案假定
stop\u id
在两个数组中都匹配。
函数合并(array1,array2){
var o={};
数组1.forEach(函数(a){
o[a.stop_id]=a;
});
array2.forEach(函数(a){
o[a.stop_id].trip=o[a.stop_id].trip | |[];
o[a.stop\u id].trip.push(a);
});
}
var array1=[{“停站id”:70021,“停站名称”:“CALTRAIN-第22街站”,“停站lat”:37.757692,“停站lon”:-122.392318,“停站id”:3329},{“停站id”:70022,“停站名称”:“CALTRAIN-第22街站”,“停站”:37.757692,“停站lon”:-122.392318,“停站id”:3329},{“停站id”:70151,“停站名称”:“CALTRAIN-阿瑟顿站”,“停站”:37.464458,“停止”:-122.198152,“区域id”:3331}],
数组2=[{“行程id”:“RTD8997283”,“到达时间”:“05:40:00”,“出发时间”:“05:40:00”,“停止id”:70021,“停止顺序”:1},{“行程id”:“RTD8997283”,“到达时间”:“05:52:00”,“出发时间”:“05:52:00”,“停止id”:70021,“停止顺序”:2},{“行程id”:“RTD8449096”,“到达时间”:“07:33:00”,“出发时间”:“07:00”,“停止id”:70022,“停止序列”:1}];
合并(array1,array2);

document.write(''+JSON.stringify(array1,0,4)+'');
在普通Javascript中,可以使用临时对象引用目标项,并将所有行程推送到另一个循环中

first.forEach(function (val, index, theArray) {
   val.trip = [];
   second.forEach(function (val2, index, theArray) {
       if(val2.stop_id === val.stop_id){
           val.trip.push(val2);
       }
   });    
});

console.log(first);
此解决方案假定
stop\u id
在两个数组中都匹配。
函数合并(array1,array2){
var o={};
数组1.forEach(函数(a){
o[a.stop_id]=a;
});
array2.forEach(函数(a){
o[a.stop_id].trip=o[a.stop_id].trip | |[];
o[a.stop\u id].trip.push(a);
});
}
var array1=[{“停站id”:70021,“停站名称”:“CALTRAIN-第22街站”,“停站”:37.757692,“停站”:-122.392318,“停站id”:3329},{“停站id”:70022,“停站名称”:“CALTRAIN-第22街站”,“停站”:37.757692,“停站”:-122.392318,“停站id”:3329},{“停站id”:70151,“停站名称”:“CALTRAIN-阿瑟顿站”,“停站”“:37.464458,“停止”:-122.198152,“区域id”:3331}],
数组2=[{“行程id”:“RTD8997283”,“到达时间”:“05:40:00”,“出发时间”:“05:40:00”,“停止id”:70021,“停止顺序”:1},{“行程id”:“RTD8997283”,“到达时间”:“05:52:00”,“出发时间”:“05:52:00”,“停止id”:70021,“停止顺序”:2},{“行程id”:“RTD8449096”,“到达时间”:“07:33:00”,“出发时间”:“07:00”,“停止id”:70022,“停止序列”:1}];
合并(array1,array2);

document.write(''+JSON.stringify(array1,0,4)+'');
您可以
array.forEach

first.forEach(function (val, index, theArray) {
   val.trip = [];
   second.forEach(function (val2, index, theArray) {
       if(val2.stop_id === val.stop_id){
           val.trip.push(val2);
       }
   });    
});

console.log(first);
for (let item1 of arr1) {
  item1.trip = arr2.find(item2 => item2.stopid === item1.stopid);
}
一把用来演奏的小提琴。
您可以
array.forEach
<
stops.map(stop=>$.extend(stop, {trip: trips.filter(trip => trip.stop_id === stop.stop_id)}))