如何将非JSON规范的字符串化数据有效解析为对象?
可以将该非规范字符串转换为对象,具体实现如下
你的serverProps字符串存在几个不符合JSON规范的问题:键名未加引号、字符串值未加引号、末尾多了};。以下是处理代码:
let serverProps = "{server-name: New Server,server-id: 165894343,server-description: New Server Description,server-avatar: ./server_avatars/165894343AEAVATAR.jpg,server-banner: 0};"; // 1. 移除末尾多余的";}" let cleaned = serverProps.replace(/};$/, ''); // 2. 给所有键名添加双引号 cleaned = cleaned.replace(/(\w+-?\w+):/g, '"$1":'); // 3. 给非数字类型的值添加双引号(匹配冒号后到逗号/结尾的非数字内容) cleaned = cleaned.replace(/:\s*([^,\d]+)(?=,|$)/g, ': "$1"'); // 4. 解析为JSON对象 const serverObj = JSON.parse(cleaned); console.log(serverObj);
代码说明
- 第一步用正则
/};$/匹配字符串末尾的};并移除,得到标准的对象结构开头。 - 第二步用
/(\w+-?\w+):/g匹配所有类似server-name:的键名,替换为带双引号的"server-name":。 - 第三步用
/:\s*([^,\d]+)(?=,|$)/g匹配冒号后、逗号或结尾前的非数字内容,给它们加上双引号,数字类型的值(比如server-id和server-banner)则保持原样。 - 最后通过
JSON.parse将处理后的规范字符串转换为JavaScript对象。
注意事项
如果你的字符串值中包含逗号、双引号等特殊字符,需要额外处理转义,否则JSON.parse会报错。当前示例中的内容不存在这类问题,所以上述代码可以直接运行。
内容的提问来源于stack exchange,提问作者GMG
相关产品推荐
相关产品推荐

