如何实现JSON数据的新增与更新?(附Node.js代码示例)
实现用户积分的新增类型与累加更新功能
原始JSON数据
[{"username":"John","id":"1","points":[{"type":"gold","amount":1}]}, {"username":"Mark","id":"2","points":[{"type":"bronze","amount":13}]}, {"username":"Mayou","id":"3","points":[{"type":"silver","amount":10}]}]
原始Node.js代码
let username = "John"; let id = 1; let amount = 1; let type = silver; const configDirectory = path.resolve(process.cwd(), "essentials"); let tableSend = JSON.parse(readFileSync(path.join(configDirectory, '../essentials/tableSend.json'))); const exist = tableSend.filter(item => item.id == id).length > 0; if (exist == true) { } else { const values = { username: username, id: id, points: [{ type: type, amount: amount }] } tableSend.push(values); let newData = JSON.stringify(tableSend); writeFileSync(path.join(configDirectory, '../essentials/tableSend.json'), newData); }
修改后的代码实现
// 修正变量定义与依赖引入 const fs = require('fs'); const path = require('path'); let username = "John"; let id = "1"; // 与JSON中id的字符串类型统一 let amount = 1; let type = "silver"; // 修正为字符串,避免未定义错误 const configDirectory = path.resolve(process.cwd(), "essentials"); const jsonPath = path.join(configDirectory, 'tableSend.json'); // 简化路径拼接 // 读取并解析JSON文件 let tableSend = JSON.parse(fs.readFileSync(jsonPath, 'utf8')); // 查找目标用户 const targetUser = tableSend.find(item => item.id === id); if (targetUser) { // 查找用户是否已有该类型积分 const targetPoint = targetUser.points.find(point => point.type === type); if (targetPoint) { // 同类型积分累加 targetPoint.amount += amount; } else { // 新增积分类型 targetUser.points.push({ type, amount }); } } else { // 用户不存在时,新增用户(保留原有逻辑) const values = { username, id, points: [{ type, amount }] }; tableSend.push(values); } // 写入格式化后的JSON数据,提升可读性 fs.writeFileSync(jsonPath, JSON.stringify(tableSend, null, 2));
关键修改说明
- 修正变量错误:把
type = silver改为字符串"silver",避免未定义变量报错;统一id为字符串类型,避免与JSON中id的类型不匹配导致查找失败 - 优化查找逻辑:用
find替代filter,直接获取目标用户/积分项,比遍历整个列表更高效 - 补充核心逻辑:用户存在时,先判断积分类型是否已存在:存在则累加金额,不存在则新增积分类型
- 简化路径与格式化输出:简化文件路径拼接,写入时用
JSON.stringify的格式化参数,让生成的JSON文件更易维护
内容的提问来源于stack exchange,提问作者raspberrypiintuision
相关产品推荐
相关产品推荐

