【问题标题】:How to name a JSON object and writing it into a .json file?如何命名 JSON 对象并将其写入 .json 文件?
【发布时间】:2021-10-15 20:35:52
【问题描述】:

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

var myJSON = {
measurements: {} };

以下,我尝试将数据推送到 json 并将该 json 写入 chart.json 文件,但出现错误:

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

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);
    }
});

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

编辑:

这是我的 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; 并将整个对象字符串化。

【问题讨论】:

  • 可以分享myJSON的值吗
  • 你为什么使用:`myJSON.measurements = JSON.stringify(measurements);`而不是对整个对象进行字符串化?我认为您需要执行以下操作:const myJSONText= JSON.stringify(myJSON); 并将myJSONText 写入您的文件
  • 我会尝试像 myJSON.measurements[i] = results[i]; 一样填充它而不使用 stringify

标签: javascript node.js json


【解决方案1】:

您不能只将对象写入文件。你需要先用JSON.stringify()序列化它:

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

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

myJSON.measurements = JSON.stringify(measurements);

用这个:

myJSON.measurements = measurements;

【讨论】:

  • 只是为了添加一些东西,也许你想使用myJSON.measurements 和noy myJSON。我这么说是因为属性是字符串化的,但不是对象;)
  • 我将其设为“myJSON.measurements = JSON.stringify(measurements);”,当我再次对其进行序列化时,json 无法正确填充。
  • @atarikaltun 然后不要序列化测量属性,只序列化整个对象。
  • 我认为第一个 myJSON.measurements = JSON.stringify(measurements); 是个坏主意,因为您希望将整个对象转换为 json,如果您执行两次,则必须 JSON.parse 对象,然后再次执行测量
  • @atarikaltun 然后删除行`myJSON.measurements = JSON.stringify(measurements); ` 并使用上面的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
相关资源
最近更新 更多