javascript中json对象无批量改键名内置方法,需通过遍历构造新对象实现:可用object.keys()+reduce处理单层对象,递归函数处理嵌套结构,解构赋值适用于少量固定键,lodash的mapkeys可简化操作但嵌套需额外处理。

JavaScript 中 JSON 对象本身没有“批量修改键名”的内置方法,但可以通过遍历对象、构造新对象的方式实现。核心思路是:读取原对象的每个键值对,用新键替换旧键,再重新组装成对象。
使用 Object.keys() + reduce 构造新对象
这是最常用、兼容性好且逻辑清晰的方式。适合普通嵌套一层的对象:
- 遍历原对象所有键名,判断是否需要重命名
- 对匹配的键,用新键名作为属性名,原值保持不变
- 不匹配的键直接保留
示例:把 firstName → first_name,lastName → last_name
const original = { firstName: "Alice", lastName: "Smith", age: 30 };
const renameMap = { firstName: "first_name", lastName: "last_name" };
const renamed = Object.keys(original).reduce((acc, key) => {
const newKey = renameMap[key] || key;
acc[newKey] = original[key];
return acc;
}, {});
// 结果:{ first_name: "Alice", last_name: "Smith", age: 30 }
处理嵌套对象(递归重命名)
如果 JSON 是多层嵌套结构,需递归遍历每个层级的对象:
- 检测当前值是否为纯对象(非 null,且 typeof === 'object',且不是 Array)
- 对对象内部的每个键执行重命名逻辑
- 数组需单独处理:遍历每一项,若为对象则递归,否则跳过
示例函数:
function renameKeys(obj, renameMap) {
if (obj === null || typeof obj !== 'object') return obj;
if (Array.isArray(obj)) {
return obj.map(item => renameKeys(item, renameMap));
}
return Object.keys(obj).reduce((acc, key) => {
const newKey = renameMap[key] || key;
acc[newKey] = renameKeys(obj[key], renameMap);
return acc;
}, {});
}
// 使用
const data = { user: { firstName: "Bob", profile: { city: "NYC" } } };
const result = renameKeys(data, { firstName: "first_name" });
// → { user: { first_name: "Bob", profile: { city: "NYC" } } }
使用解构 + 新对象字面量(适合少量固定键)
当只改几个已知键,且结构简单时,可读性更高:
- 用解构提取要改名的字段
- 在新对象中用别名赋值
- 剩余字段用展开运算符合并
示例:
const { firstName: first_name, lastName: last_name, ...rest } = original;
const renamed = { first_name, last_name, ...rest };
⚠️ 注意:这种方式不适用于动态键名或大量键,也不支持嵌套重命名。
借助第三方库(如 lodash)
如果项目已引入 lodash,可用 mapKeys 简化操作:
const _ = require('lodash');
const renamed = _.mapKeys(original, (value, key) =>
({ firstName: "first_name", lastName: "last_name" }[key] || key)
);
对嵌套结构,仍需配合 _.cloneDeep 和自定义递归逻辑,不如手写控制灵活。
不复杂但容易忽略:JSON 是字符串格式,真正操作的是解析后的 JavaScript 对象;修改键名后如需传输,记得再 JSON.stringify() 回去。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











