是否可以修改位于 JSON 文件上的数组?

Posted

技术标签:

【中文标题】是否可以修改位于 JSON 文件上的数组?【英文标题】:Is it possible to modify an array located on a JSON file? 【发布时间】: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

【问题讨论】:

我认为您应该将更改写入文件***.com/questions/36856232/… @IzzyEngelbert 我相信这是 Harshana Smith 回答的基础 【参考方案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 文件。

【讨论】:

以上是关于是否可以修改位于 JSON 文件上的数组?的主要内容,如果未能解决你的问题,请参考以下文章

是否将备份位于 iOS 应用程序上的文档文件夹中的所有文件?

使用zabbix监控位于两台不同的机器上的文件是否一致

将 json 对象文件保存为 json 数组而不是 s3 上的 json 对象

通过位于http服务器上的ks文件无人值守安装CentOS 6.9

八Delphi10.3读取JSON文件,并修改JSON数组一条内容后保存到文件

如果它们位于不同的文件夹中,是不是可以有两个具有相同名称的类?