如何用JavaScript将JSON中的列名替换为数组值
解决方案
首先要注意你提供的Json变量是对象字面量字符串,不是严格的JSON格式(严格JSON的键需要双引号),以下是两种可行的实现方式:
方法一:正则匹配直接替换
直接对字符串进行正则匹配,定位所有冒号前的键名,按顺序替换为数组中的值,最后处理最后一个键的冒号转等号:
const jsonStr = "{id: '1', name: 'Abednego Nasila', Reg: '123'}"; const arr = ['myId', 'Student_name', 'Adm.no']; // 匹配冒号前的键名,依次替换为数组对应值 let result = jsonStr.replace(/(\w+)(?=:)/g, () => arr.shift() || match); // 把最后一个冒号替换成等号(匹配末尾的: '123') result = result.replace(/: '123'$/, "= '123'"); console.log(result); // 输出:"{myId: '1', Student_name: 'Abednego Nasila', Adm.no = '123'}"
方法二:转对象重构(更安全)
先将字符串转为对象,再重新构建带有新键名的对象,最后转成目标格式的字符串:
const jsonStr = "{id: '1', name: 'Abednego Nasila', Reg: '123'}"; const arr = ['myId', 'Student_name', 'Adm.no']; // 转成对象(仅在信任字符串内容时使用eval,若来源不可信建议先转严格JSON再用JSON.parse) const originalObj = eval(`(${jsonStr})`); const newObj = {}; const originalKeys = Object.keys(originalObj); // 遍历原键和数组值,构建新对象 originalKeys.forEach((key, index) => { newObj[arr[index]] = originalObj[key]; }); // 转字符串并调整格式:去掉键的双引号,替换最后一个冒号为等号 let result = JSON.stringify(newObj) .replace(/"([^"]+)":/g, '$1:') .replace(/: "123"$/, "= '123'"); console.log(result); // 输出:"{myId: '1', Student_name: 'Abednego Nasila', Adm.no = '123'}"
注意事项
- 正则方法适合简单场景,若键名包含特殊字符(如空格、非字母数字符号),需要调整正则表达式适配。
- 使用
eval存在安全风险,若字符串来自不可信来源,建议先将其转换为严格JSON格式(给所有键添加双引号),再用JSON.parse解析。
内容的提问来源于stack exchange,提问作者Abednego Nasila
相关产品推荐
相关产品推荐

