使用简单模板制作带有多个对象的JSON文件

Jér*_*ôme 0 javascript json node.js ecmascript-6

我有一个REST API POST请求使用的模板JSON文件.该文件包含此对象

{
    "Subject": "template",
    "Body": {
        "ContentType": "HTML",
        "Content": "template"
    },
    "Start": {
        "DateTime": "2014-02-02T18:00:00",
        "TimeZone": "Europe/Paris"
    },
    "End": {
        "DateTime": "2014-02-02T19:00:00",
        "TimeZone": "Europe/Paris"
    }
}
Run Code Online (Sandbox Code Playgroud)

我写了一个小函数来改变这个对象中的一些数据并将其保存到另一个调用的json文件中 jsonOutput.json

有改变数据的功能,这很好用.

function insertDatasJson (res) {
    let fs = require('fs');
    let base = require('../public/json/template.json');

    base.Subject = 'f';
    base.Body.Content = 'e';
    base.Start.DateTime = '2016-11-13T08:30:00';
    base.End.DateTime = '2016-11-13T17:30:00';

    fs.writeFileSync('./public/json/output/jsonOutput.json', JSON.stringify(base, null, 4));
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试做同样的修改,但我有很多数据要修改(多个主题,多个内容和多个开始/结束日期)

我试图有这样的输出文件

[
    {
        "Subject": "1",
        "Body": {
            "ContentType": "HTML",
            "Content": "1"
        },
        "Start": {
            "DateTime": "2014-02-02T18:00:00",
            "TimeZone": "Europe/Paris"
        },
        "End": {
            "DateTime": "2014-02-02T19:00:00",
            "TimeZone": "Europe/Paris"
        }
    },
    // some other objects ...
    {
        "Subject": "n",
        "Body": {
            "ContentType": "HTML",
            "Content": "n"
        },
        "Start": {
            "DateTime": "2014-02-02T18:00:00",
            "TimeZone": "Europe/Paris"
        },
        "End": {
            "DateTime": "2014-02-02T19:00:00",
            "TimeZone": "Europe/Paris"
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在我的小函数中做一个简单的循环,每个数据都会覆盖之前的数据,我会得到一个类似模板的输出文件.

如何在循环期间不覆盖数据并拥有像我的示例一样的输出文件?

小智 6

我认为问题是你用文件覆盖了文件fs.writeFileSync().

您应该使用fs.appendFileSync()将新数据添加到文件末尾.请参阅节点文档.

https://nodejs.org/api/fs.html#fs_fs_appendfilesync_file_data_options