【问题标题】:How can I create multiple objects in JSON with Javascript? [duplicate]如何使用 Javascript 在 JSON 中创建多个对象? [复制]
【发布时间】:2021-04-25 14:18:51
【问题描述】:

我想用JS在JSON中创建多个对象,即使信息相同而不是替换旧对象。

这是我正在使用的代码。

student.js:

'use strict';

const fs = require('fs');

let student = {
  name: 'Mike',
  age: 25,
  gender: 'Male',
  department: 'English',
  car: 'Honda'
};

let data = JSON.stringify(student);

fs.writeFileSync('file.json', data, finished());

function finished(err) {
  console.log('success');
}

file.json(student.js 的结果):

{
  "name": "Mike",
  "age": 25,
  "gender": "Male",
  "department": "English",
  "car": "Honda"
}

但是当我用相同的值再次运行代码时,什么都没有发生,file.json 保持不变,就好像我只运行了一次一样。

例如,如果我运行 student.js 三次(不更改其中的任何值),我该如何实现这样的目标?

{
  "name": "Mike",
  "age": 25,
  "gender": "Male",
  "department": "English",
  "car": "Honda"
} {
  "name": "Mike",
  "age": 25,
  "gender": "Male",
  "department": "English",
  "car": "Honda"
} {
  "name": "Mike",
  "age": 25,
  "gender": "Male",
  "department": "English",
  "car": "Honda"
}

谢谢。

【问题讨论】:

  • 您不能向对象添加相同的键。如果要重复一个值,请在 JSON 中使用数组
  • 为什么要在 json 中重复对象?
  • writeFileSync 正在替换已经存在的文件
  • 是的,fs.appendFile 将追加数据。 fs.writeFileSync 不会。附带说明一下,您的代码现在正在做什么:调用finished(),获取undefined,将undefined 作为fs.writeFileSync 的第三个参数传递(所以不是很有用)。特别是当第三个参数应该是一个选项对象时。 Sync 表示在这种情况下该函数不接受任何回调。它是同步的

标签: javascript node.js json fs


【解决方案1】:

fs.writeFileSync() like fs.writeFile() 将在文件已经存在时替换它。所以当你再次调用该函数时,它会看到这个文件存在并正在替换它。

你要找的是fs.appendFileSync()

const fs = require('fs');
fs.appendFileSync('message.txt', 'data to append');

注意

Node.js 开发人员更喜欢异步方法而不是同步方法 作为异步方法的方法从不会在程序运行期间阻塞程序 执行,而后者执行。阻塞主线程是 Node.js 中的弊端,因此只能使用同步函数 用于调试或没有其他选项可用时。

我建议看看异步函数appendFile()

fs.appendFile('message.txt', 'data to append', (err) => {
  if (err) throw err;
  console.log('The "data to append" was appended to file!');
});

【讨论】:

    猜你喜欢
    • 2015-02-06
    • 2015-11-13
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多