首页 > 解决方案 > 如何命名 JSON 对象并将其写入 .json 文件?

问题描述

我试图像这样创建一个空的 json 变量;

var myJSON = {
measurements: {} };

在下面,我尝试将数据推送到 json 并将该 json 写入 chart.json 文件但发生错误:

TypeError [ERR_INVALID_ARG_TYPE]:“数据”参数必须是字符串类型或 Buffer、TypedArray 或 DataView 的实例。收到一个对象实例

connection.query('SELECT Temprature,Humidity, Time from miTemp1', function (error, results, fields) {
    if (error) throw error;
    let i = 0, j = 0;
    console.log(typeof (results))
    while (i < results.length) {
        let myDate = new Date(results[i].Time * 1000);
        // console.log('Temp: ' + results[i].Temprature, 'Humidty:' + results[i].Humidity, 'Time: ' + myDate.toLocaleString());
        measurements[i] = results[i];
        i += 510;
        j++;
    }
    myJSON.measurements = JSON.stringify(measurements);
    console.log(typeof(myJSON));
    console.log(myJSON);
    console.log(new Date().toLocaleString() + '  Number of measurement: ' + j);
    try {
        fs.writeFileSync('./chart.json', myJSON);
        console.log("JSON data is saved.");
    } catch (error) {
        console.error(error);
    }
});

如果我像创建 json 变量一样var myJSON = {}没有问题。为什么会这样?感谢帮助^-^

编辑:

这是我的 JSON 数据。

{
"0": {
    "Temprature": 25.88,
    "Humidity": 43,
    "Time": 1628164626
},
"510": {
    "Temprature": 26.22,
    "Humidity": 45,
    "Time": 1628169522
},

解决方案:我需要做的就是改变myJSON.measurements = JSON.stringify(measurements);整个myJSON.measurements = measurements;对象并将其字符串化。

标签: javascriptnode.jsjson

解决方案


您不能只将对象写入文件。您需要先使用以下命令对其进行序列化JSON.stringify()

fs.writeFileSync('./chart.json', JSON.stringify(myJSON));

您也不需要序列化measurements属性,因为您序列化了整个对象。你可以替换这个:

myJSON.measurements = JSON.stringify(measurements);

有了这个:

myJSON.measurements = measurements;

推荐阅读