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

如何实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:01:11