如何用JavaScript修改JSON中Meeting.Output的comment字段并保留其余结构
原有代码问题
- 第一层循环未正确索引数组元素:payload是数组类型,直接访问
payload.Meeting会得到undefined,需要通过循环索引payload[i]访问当前遍历的对象 - 内层循环变量名误用:将存储数组长度的数字变量
reqArrLength当成数组本身取元素,必然触发报错,应该使用提前定义好的数组变量reqArr访问元素 - 循环变量冲突:内外两层循环都使用
var i作为遍历变量,var的变量提升特性会污染外层循环计数,导致逻辑完全混乱 - 边界判断不严谨:仅判断null、空字符串、undefined不够,需要额外判断
Meeting.Output是否为数组类型,避免后续调用length属性报错
可行实现方案
以下实现完全保留原有JSON结构,仅修改Meeting.Output数组内的comment字段,其余字段不做任何改动:
session.input.readAsJSON(function(readAsJSONError, payload) { // 先处理JSON读取错误,避免后续逻辑崩溃 if (readAsJSONError) { console.error('JSON读取失败: ', readAsJSONError); return; } // 遍历外层数组 for (let i = 0; i < payload.length; i++) { const currentObj = payload[i]; // 安全校验:判断Meeting和Output是否存在,且Output为数组类型 const outputArr = currentObj?.Meeting?.Output; if (!Array.isArray(outputArr)) { console.log(`索引为${i}的对象无有效Meeting.Output数组,跳过处理`); continue; } // 遍历Output数组修改comment for (let j = 0; j < outputArr.length; j++) { const outputItem = outputArr[j]; // 仅当comment字段存在时调用自定义方法修改 if (outputItem.hasOwnProperty('comment')) { outputItem.comment = callsomefunction(outputItem.comment); } } } // 处理完成后可直接输出payload,例如: // session.output.write(payload); });
如果需要保留原输入payload不被修改,可在处理前对payload做深拷贝,后续遍历拷贝后的对象即可:
const processedPayload = JSON.parse(JSON.stringify(payload));
内容的提问来源于stack exchange,提问作者Virat
相关产品推荐
相关产品推荐

