如果尚未定义ID,则写入JSON数据库

时间:2019-01-10 02:00:59

标签: javascript

我想要一个看起来像这样的JSON文件:

fs.readFile("./db.json", "utf8", (err, data) => {
  if (err) {
    throw err;
  } else {
    let json = JSON.parse(data);
    if (!json) {
      json[identificator] = {};
    }
    if (!json[identificator].array) {
      json = json[identificator] = {
        array: []
      };
    }
    let array = json[identificator].array;
    if (array.includes(value)) return;
    array.push(value);
    fs.writeFile("./db.json", JSON.stringify(json, null, 4), err => {
      if (err) throw err;
    });
  }
});

如果需要将新值添加到现有ID的一个数组中,或者需要添加具有其数组和第一个值的新ID,我想做的就是写入或附加到该文件。因此它将作为数据库工作。我想为此使用JSON,以便能够轻松地手动修改该文件的内容,而且它的大小永远不会超过1或2 MB。这是一些实际有效的代码,但前提是在JSON文件中已经定义了给定的ID及其数组:

bundle exec rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- bin/rails s -b 0.0.0.0

1 个答案:

答案 0 :(得分:1)

您的条件错误。您需要测试json[identificator]是否存在,而不是json是否存在。

此外,json = json[identificator] = ...是错误的,因为它仅用一个条目替换了json

fs.readFile("./db.json", "utf8", (err, data) => {
  if (err) {
    throw err;
  } else {
    let json = data ? JSON.parse(data) : {};
    if (!json[identificator]) {
      json[identificator] = {
        array: []
      };
    }
    let array = json[identificator].array;
    if (array.includes(value)) return;
    array.push(value);
    fs.writeFile("./db.json", JSON.stringify(json, null, 4), err => {
      if (err) throw err;
    });
  }
});