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

Node.js中如何替换JSON文件中的指定对象值?

问题分析与解决方法

一、原始JSON文件的问题

你的test.json本身不是合法的JSON格式,这是报错的核心原因之一:

  • details字段的值it-goes-here没有用双引号包裹,JSON要求字符串必须用双引号
  • columns数组里的etc.,是无效语法,JSON不允许这种占位符
  • 最后一行},多了一个逗号,JSON里数组或对象的最后一个元素不能带尾随逗号

二、代码中的问题

  1. fs.readFileSync是同步方法,不需要加await,同步方法直接返回结果,加await属于用法错误
  2. 你先把读取到的字符串用JSON.stringify转成JSON字符串(相当于把原字符串转成带转义的字符串),再替换后执行JSON.parse,这是逻辑错误,会把原字符串当成JSON解析,必然报错
  3. 替换时直接用replaced-data,没有把目标JSON对象转成合法的JSON字符串,就算替换成功,也会导致JSON格式错误

三、正确的解决步骤

步骤1:修复test.json为合法格式

先把test.json改成合法JSON,将占位符改为字符串形式:

{
  "details": "it-goes-here",
  "dbs": [
    {
      "schemas": [
        {
          "schemaName": "schemaName",
          "tables": [
            {
              "tableName": "tableName",
              "type": "table",
              "columns": [
                {
                  "name": "name",
                  "gender": "F",
                  "canDonate": true,
                  "database": "database"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

步骤2:编写正确的Node.js代码

直接解析JSON对象后替换字段,是最稳妥的方式:

const fs = require('fs');
const path = require('path');

// 定义要替换的目标JSON对象
const replacementObj = {
    "parenturl":"xxx.com",
    "username":"userId",
    "password":"xxx!",
    "id":"id",
    "url":"xxx.com",
    "xxx":"xxx"
};

try {
    // 同步读取文件(无需await)
    const rawData = fs.readFileSync(path.join(__dirname, './test/test.json'), 'utf8');
    // 解析为JSON对象
    let data = JSON.parse(rawData);
    // 直接替换details字段的值
    data.details = replacementObj;
    // 把修改后的对象转成格式化的JSON字符串
    const updatedData = JSON.stringify(data, null, 2);
    // 写入文件
    fs.writeFileSync(path.join(__dirname, './test/test.json'), updatedData);
    console.log("文件修改成功");
} catch (err) {
    console.error("错误:", err);
}

若不想提前修改test.json(保留原占位符)

可以先将文件作为字符串处理,替换后再解析(需确保替换后内容合法):

const fs = require('fs');
const path = require('path');

const replacementObj = {
    "parenturl":"xxx.com",
    "username":"userId",
    "password":"xxx!",
    "id":"id",
    "url":"xxx.com",
    "xxx":"xxx"
};

// 将目标对象转成合法的JSON字符串
const replacementStr = JSON.stringify(replacementObj, null, 2);

try {
    const rawData = fs.readFileSync(path.join(__dirname, './test/test.json'), 'utf8');
    // 替换原占位符
    const updatedRawData = rawData.replace('it-goes-here', replacementStr);
    // 解析验证格式
    const data = JSON.parse(updatedRawData);
    // 写入格式化后的JSON文件
    fs.writeFileSync(path.join(__dirname, './test/test.json'), JSON.stringify(data, null, 2));
    console.log("文件修改成功");
} catch (err) {
    console.error("错误:", err);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:50:28