如何原地修改JSON对象一级键,为其添加外层转义引号?
问题原因与解决方法
原代码问题分析
你在forEach循环中对循环变量k重新赋值,仅修改了该临时字符串副本的取值,完全没有改动原对象的键结构。JavaScript对象的键不支持直接重命名,必须通过「新增目标格式的新键、挂载原有值、删除旧键」的流程完成更新。
实现代码
const j = '{"a": "b", "c": "d"}'; let obj = JSON.parse(j); // 一次性拿到所有原始一级键,避免遍历过程中新增的键干扰循环 Object.keys(obj).forEach(oldKey => { // 生成带外层引号的新键,序列化后会自动转义为预期的格式 const newKey = `"${oldKey}"`; // 给新键挂载原有值 obj[newKey] = obj[oldKey]; // 删除旧键 delete obj[oldKey]; }); console.log(JSON.stringify(obj, null, 2));
运行输出
{ "\"a\"": "b", "\"c\"": "d" }
注意事项
- 如果原对象本身已经存在和新键同名的键,原有同名键的值会被覆盖,处理前可先做存在性判断
- 该方法仅修改一级键,嵌套对象的键不会被处理,如果需要处理嵌套键可以递归实现
内容的提问来源于stack exchange,提问作者Sandra Schlichting
相关产品推荐
相关产品推荐

