【问题标题】:Is it possible to modify an array located on a JSON file?是否可以修改位于 JSON 文件上的数组?
【发布时间】:2021-03-05 19:02:30
【问题描述】:

我正在尝试创建一个存储字符串数组的命令,并且因为我不希望由于进程重新启动而丢失所有内容,所以我决定使用 JSON 文件数组.到目前为止,我已经能够写入文件并添加数组。但是,我的障碍是尝试修改该数组并使用它更新文件。每当我尝试将.push 添加到数组时,它确实添加了字符串,而不是添加到文件中。所以我提出了一个问题:是否可以修改位于 JSON 文件中的数组?代码片段如下

const database = require('../../characters.json')

const charArray = database[message.author.id]
switch(args[0].toLowerCase()) {
  case "add":
    charArray.push(`${args.slice(1).join(" ")}`)
    break;
  case "view":
    // This code works
  case "remove":
    let pos = charArray.indexOf(`${args.slice(1).join(" ")}`)
    charArray.splice(pos, 1)
    break;
  default:
    // This code works
}

【问题讨论】:

标签: javascript node.js arrays json discord.js


【解决方案1】:

您必须写入 JSON 文件才能修改其中的数组。为此,您可以使用 NodeJS fs 库。检查下面的代码:

const fs = require('fs');
const database = require('../../characters.json')

const charArray = database[message.author.id]
switch(args[0].toLowerCase()) {
  case "add":
    charArray.push(`${args.slice(1).join(" ")}`)
    database[message.author.id] = charArray;
    fs.writeFileSync('../../characters.json', JSON.stringify(database));
    break;
  case "view":
    // This code works
  case "remove":
    let pos = charArray.indexOf(`${args.slice(1).join(" ")}`)
    charArray.splice(pos, 1)
    break;
  default:
    // This code works
}

【讨论】:

  • 我假设对于remove,我执行相同的 fs.writeFileSync 代码?
  • 是的。你必须这样做
【解决方案2】:

每次执行突变时,您都必须重写整个 json 文件。

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2019-11-28
    相关资源
    最近更新 更多