如何正确使用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
相关产品推荐
相关产品推荐

