我只需要合并具有相同列表的两个文件,但每个文件上的值都不同。最好使用JavaScript
例如:
文件1
{"list1":{"a":1,"b":2}
{"list2":{"c":3,"d":4}
文件2
{"list1":{"a":5,"b":6}
{"list2":{"c":7,"d":8}
所需的结果是
{"list1":{"a":6,"b":8}
{"list2":{"c":10,"d":12}
很抱歉出现noob问题,但是向我发送文件的人应该自己完成此操作,但目前不可用。这些文件太大,无法手工处理。
答案 0 :(得分:0)
您可以尝试
newList = list1.concat(list2);
答案 1 :(得分:0)
这不是非常灵活的代码,但是要使某些内容更具动态性,它将需要做更多的工作。您将必须递归解析对象,并检查该属性是否为对象,然后再跳得更深。直到找到值。
请注意,我不会进行任何类型检查。如果数据包含错误数据,则无法正确处理。此代码也需要这种确切的结构。如果您的对象包含其他属性,它也可能会崩溃。
// your data
const f1l1 = '{"list1":{"a":1,"b":2}}';
const f1l2 = '{"list2":{"c":3,"d":4}}';
const f2l1 = '{"list1":{"a":5,"b":6}}';
const f2l2 = '{"list2":{"c":7,"d":8}}';
var result1= JSON.parse(f1l1);
var result2= JSON.parse(f1l2);
//the names of the list as they appear in your real data *must* be the first object
const nameList1 = Object.keys(result1)[0];
const nameList2 = Object.keys(result2)[0];
//remove the list name
result1=result1[nameList1];
result2= result2[nameList2];
//get data from other file nd remove list name
const file2List1= JSON.parse(f2l1)[nameList1];
const file2List2= JSON.parse(f2l2)[nameList2];
// go through all items and sum them if the value is already in the list, else put it in for list1
for (var prop in file2List1) {
if (Object.prototype.hasOwnProperty.call(file2List1, prop)) {
if(Object.prototype.hasOwnProperty.call(result1, prop)){
result1[prop] = result1[prop] + file2List1[prop];
}else{
result1[prop] = file2List1[prop];
}
}
}
// and now for list2
for (var prop in file2List2) {
if (Object.prototype.hasOwnProperty.call(file2List2, prop)) {
if(Object.prototype.hasOwnProperty.call(result2, prop)){
result2[prop] = result2[prop] + file2List2[prop];
}else{
result2[prop] = file2List2[prop];
}
}
}
//put names of lists back in.
result1 = {[nameList1]:result1};
result2 = {[nameList2]:result2};
//check results:
console.log("input data:");
console.log(JSON.parse(f1l1));
console.log(JSON.parse(f1l2));
console.log(JSON.parse(f2l1));
console.log(JSON.parse(f2l2));
console.log("output data:");
console.log(result1);
console.log(result2);