Node.js查找JSON数组首个匹配元素并修改值写回文件
Node.js脚本改造方案
你现有用于修改JSON文件的Node.js脚本,需要实现的核心逻辑为:定位JSON对象中numbers数组内第一个值为2的元素,将其值更新为3,其余字段保持不变。
改造后可直接运行的完整代码
const fsp = require('fs').promises; async function updateTargetValueInFile() { try { // 读取文件内容,指定utf-8编码避免返回Buffer类型 const fileContent = await fsp.readFile('example.json', 'utf-8'); const jsonObj = JSON.parse(fileContent); // 查找numbers数组中第一个值为2的元素索引 const targetPos = jsonObj.numbers.findIndex(num => num === 2); // 确认找到匹配元素后再执行修改,避免无匹配时产生异常属性 if (targetPos !== -1) { jsonObj.numbers[targetPos] = 3; } // 写回文件,使用2空格缩进保持JSON格式化输出,和原文件格式一致 await fsp.writeFile('example.json', JSON.stringify(jsonObj, null, 2)); } catch (err) { console.error('脚本执行出错:', err); } } updateTargetValueInFile();
核心逻辑说明
- 读取文件时显式传入
utf-8编码参数,规避默认返回Buffer实例可能引发的JSON解析异常 - 用数组原生方法
findIndex遍历numbers数组,该方法会按顺序返回第一个匹配判定条件的元素索引,无匹配项时固定返回-1,刚好满足“查找第一个值为2的元素”的需求 - 增加匹配结果校验,仅在确实找到目标元素时执行赋值操作,避免无匹配项时给数组追加非法的负索引属性
- 调用
JSON.stringify时传入第三个参数2,输出带2空格缩进的格式化JSON内容,不会把文件内容压缩成单行,和你给出的原文件、期望输出的排版格式完全一致
执行结果验证
脚本运行完成后,example.json文件内容会和预期完全一致:numbers数组中索引为6的元素(原值为2)会被修改为3,foods、surnames、date等其余字段不会发生任何改动。
内容的提问来源于stack exchange,提问作者mrDandaleonx
相关产品推荐
相关产品推荐

