如何使用node.js将多个json的对象合并到一个json文件中
Posted
技术标签:
【中文标题】如何使用node.js将多个json的对象合并到一个json文件中【英文标题】:how to merge object of multiple json into one json file using node.js 【发布时间】:2018-08-18 21:34:29 【问题描述】:我有多个 json 文件,它们只想合并其中的特定对象,然后将其保存到新的 json 文件中: 例如:
one.json
two.json
...
每个json文件都是这样的:
one.json
"passed": 1,
"fixtures": [
"name": "Getting Started one",
"path": "testOne.ts"
]
两个.json
"passed": 1,
"fixtures": [
"name": "Getting Started two",
"path": "testTwo.ts"
]
所以我最终的 json 文件应该是这样的:
final.json
"passed": 2,
"fixtures": [
"name": "Getting Started one",
"path": "testOne.ts"
,
"name": "Getting Started two",
"path": "testTwo.ts"
]
你知道像这样合并的简单方法是什么吗?
node: json 文件不只是两个,而是很多,所以最好找到每个扩展名为 json 的文件。 最好在 shell 脚本或 node.js 中执行此操作。
谢谢。
【问题讨论】:
【参考方案1】:可以使用 Promise 做这样的事情:
const fs = require('fs');
const data =
"passed": 0,
"fixtures": []
;
const dir = `$__dirname/data/`;
fs.readdir(dir, (err, files) =>
return new Promise((resolve, reject) =>
if (err) reject(err);
files.forEach(file =>
console.log(file);
let content = require(`$dir$file`);
data['passed'] += content.passed;
data['fixtures'] = data['fixtures'].concat(content['fixtures']);
);
resolve(data);
).then(data =>
fs.writeFileSync('./final.json',JSON.stringify(data));
);
)
使用 Async/Await 可以这样做:
const fs = require('fs');
const path = require('path');
const dir = path.join(__dirname, 'data');
let finalContent = "fixtures": [], "passed": 0 ;
const read_directory = async dir =>
fs.readdirSync(dir).reduce((finalContent, file) =>
filePath = path.join(dir, file);
console.log(filePath);
let content = require(filePath);
finalContent.passed += content.passed;
finalContent.fixtures = finalContent.fixtures.concat(content.fixtures);
return finalContent;
, "passed": 0, "fixtures": [] );
read_directory(dir).then(data =>
fs.writeFileSync('./final.json', JSON.stringify(data));
);
【讨论】:
感谢您的出色解决方案,我已经修改了问题,实际上我在每个 json 中添加了另一个对象,它不是数组,而是 number ,并且在最终的 json 中它应该是所有数字的总和,确实有针对这种情况的解决方案。谢谢 更新了,看看【参考方案2】:实际上,如果你想通过 node.js 来做,你可以使用其中一个 node 包,这会让你很容易。例如,它是一个很好的合并 json 包 - https://www.npmjs.com/package/package-merge
【讨论】:
【参考方案3】:首先将JSON反序列化为对象,将所有对象放入一个列表中,再将列表对象序列化为JSON。
【讨论】:
以上是关于如何使用node.js将多个json的对象合并到一个json文件中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Node.js 上将多个 JSON 文件拉入 SWIG?
如何使用 node.js 将多行 JSON 数据同时插入 MySQL?