如何从JS写入键与数组值到JSON?同键时如何覆写数组值?
JavaScript(Node.js)实现JSON文件键值的覆写/新增
要实现存在键则更新值,无键则新增键值对的需求,核心逻辑是先读取现有JSON文件内容转为JS对象,修改对象后再写回文件。以下是具体实现方案:
核心步骤
- 读取目标JSON文件,若文件不存在则初始化一个空对象
- 将读取到的JSON内容解析为JavaScript对象
- 对对象进行操作:直接赋值
对象[键] = 值,自动实现覆写/新增 - 将修改后的对象序列化为格式化的JSON字符串,写回文件
异步实现(推荐,不阻塞主线程)
使用Node.js的fs.promises模块进行异步文件操作:
const fs = require('fs').promises; async function updateJson(filePath, key, value) { let jsonData = {}; // 读取现有文件或初始化空对象 try { const fileContent = await fs.readFile(filePath, 'utf8'); jsonData = JSON.parse(fileContent); } catch (err) { if (err.code !== 'ENOENT') { // 仅忽略文件不存在的错误 console.error('读取文件失败:', err); throw err; } } // 覆写/新增键值对 jsonData[key] = value; // 写回文件,格式化输出(缩进2空格) await fs.writeFile(filePath, JSON.stringify(jsonData, null, 2), 'utf8'); console.log(`键 "${key}" 已更新完成`); } // 使用示例 const targetKey = 'EX1.json_001'; const targetValue = [ [{"name": "name1"}, {"name": "name2"}, {"name": "name3"}], [{"name": "name4"}, {"name": "name5"}, {"name": "name6"}] ]; updateJson('./your-file.json', targetKey, targetValue) .catch(err => console.error('操作失败:', err));
同步实现(适合简单场景)
如果是简单脚本,也可以用同步版本:
const fs = require('fs'); function updateJsonSync(filePath, key, value) { let jsonData = {}; try { const fileContent = fs.readFileSync(filePath, 'utf8'); jsonData = JSON.parse(fileContent); } catch (err) { if (err.code !== 'ENOENT') { console.error('读取文件失败:', err); throw err; } } jsonData[key] = value; fs.writeFileSync(filePath, JSON.stringify(jsonData, null, 2), 'utf8'); console.log(`键 "${key}" 已更新完成`); } // 使用示例 updateJsonSync('./your-file.json', 'EX1.json_002', [/* 你的数组数据 */]);
注意事项
- 仅适用于Node.js环境:浏览器无法直接操作本地文件,若需浏览器场景需通过后端接口实现
- 处理非法JSON:如果目标文件内容不是合法JSON,解析会报错,可根据需求添加错误处理逻辑(比如清空文件或提示用户)
- 并发写入风险:若多个进程同时修改同一文件,可能导致数据丢失,高并发场景建议使用数据库或文件锁机制
内容的提问来源于stack exchange,提问作者cfwithdecaf
相关产品推荐
相关产品推荐

