Node.js中如何替换JSON文件中的指定对象值?
问题分析与解决方法
一、原始JSON文件的问题
你的test.json本身不是合法的JSON格式,这是报错的核心原因之一:
details字段的值it-goes-here没有用双引号包裹,JSON要求字符串必须用双引号columns数组里的etc.,是无效语法,JSON不允许这种占位符- 最后一行
},多了一个逗号,JSON里数组或对象的最后一个元素不能带尾随逗号
二、代码中的问题
fs.readFileSync是同步方法,不需要加await,同步方法直接返回结果,加await属于用法错误- 你先把读取到的字符串用
JSON.stringify转成JSON字符串(相当于把原字符串转成带转义的字符串),再替换后执行JSON.parse,这是逻辑错误,会把原字符串当成JSON解析,必然报错 - 替换时直接用
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
相关产品推荐
相关产品推荐

