如何使用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 对象的子元素

如何使用 node.js 将多行 JSON 数据同时插入 MySQL?

如何将 MongooseMap 转换为 JSON 对象以将其从 Node js 发送到 React?

Node.js:如何交换 JSON 对象 [重复]

在 Node.js/Express.js 中,如何将 JSON 对象从服务器传输到客户端?