You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用JSON模块及electron-storage修改JSON文件数组属性?

1. 如何正确使用JSON模块?

JSON是Node.js内置的核心模块,不用额外安装,日常开发主要用它完成JSON字符串解析和JS对象序列化两类操作,下面给你拆解常用方法和避坑要点:

  • 解析JSON字符串为JS对象
    用JSON.parse()方法,能把后端返回或文件读取的JSON字符串转成可直接操作的JS对象。注意一定要处理解析失败的场景(比如JSON格式不合法),建议用try-catch包裹:

    const jsonStr = '{"username": "Mike", "score": 90}';
    try {
      const userObj = JSON.parse(jsonStr);
      console.log(userObj.username); // 输出Mike
    } catch (err) {
      console.error("JSON解析失败:", err);
    }
    
  • 序列化JS对象为JSON字符串
    用JSON.stringify()方法,把JS对象转成JSON格式字符串,方便写入文件或传给后端。如果想让输出的JSON更易读,可以添加缩进参数:

    const userObj = { username: "Lily", tags: ["frontend", "react"] };
    // 压缩格式的JSON字符串
    const compactJson = JSON.stringify(userObj);
    // 带2空格缩进的美化格式
    const prettyJson = JSON.stringify(userObj, null, 2);
    console.log(prettyJson);
    
  • 避坑提醒

    • JSON的键必须用双引号,单引号或无引号的键会导致解析报错;
    • 函数、Symbol、undefined这类类型无法被JSON序列化,对象中的这类属性会被自动忽略,数组中的会转为null;
    • 处理超大JSON文件时,一次性解析可能占用过多内存,可考虑流式解析工具,但日常业务用parse和stringify完全够用。
2. 解决electron-storage数组元素添加的问题

你当前的代码问题很清晰:你把data["test"]直接赋值成了字符串"path1",相当于把原来的数组覆盖成了单个字符串,再把这个字符串传给storage.set,自然会替换整个文件内容。正确的做法是往数组里追加元素,再把完整的更新对象写回文件,具体代码如下:

storage.get(filePath)
  .then(data => {
    // 先确保test属性是数组,防止文件被意外修改导致类型异常
    if (!Array.isArray(data.test)) {
      data.test = [];
    }
    data.test.push("path1"); // 将字符串添加到数组末尾
    return storage.set(filePath, data); // 把完整的更新对象写入文件
  })
  .then(() => {
    console.log("元素已成功添加到test数组!");
  })
  .catch(error => {
    console.error("操作出错:", error);
  });

为什么这个方法可行?

  • storage.get读取文件后返回的data是包含test数组的完整对象;
  • 用push方法往data.test数组里追加新元素,而非替换整个数组;
  • 最后把整个data对象传给storage.set,这样文件会保留原有结构,只更新test数组的内容。

另外建议加上catch块处理可能的错误,比如文件不存在、权限不足等情况,让代码更健壮。

内容的提问来源于stack exchange,提问作者Un1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:43:14