如何将含百分比符号的类JSON字符串转换为JavaScript对象?
解决方案
要解决百分比符号处理异常的问题,核心是在转换前先把带%的数值整体包裹为字符串,避免后续处理时将%识别为运算符拆分。以下是具体实现步骤:
步骤1:预处理字符串,处理百分比部分
先通过正则匹配所有数字+%的模式,将其替换为带双引号的字符串,确保10%被识别为完整的字符串值。
步骤2:补全JSON格式要求的引号
给对象的键、未加引号的字符串值补双引号,让整个字符串符合JSON语法规范。
完整代码示例
// 原始类对象字符串 const input = "{keyOne: valueOne, KeyTow: [10, true, null, 10%], keyThree: {hello: hi}}"; // 1. 处理百分比:把数字+%的部分包裹成字符串 const processedWithPercent = input.replace(/(\d+\.?\d*)%/g, '"$1%"'); // 2. 给对象的键添加双引号 const withQuotedKeys = processedWithPercent.replace(/([{,]\s*)([a-zA-Z_$][\w$]*)(\s*:)/g, '$1"$2"$3'); // 3. 给未加引号的字符串值添加双引号(跳过数字、true/false、null) const jsonValidStr = withQuotedKeys.replace(/:\s*([a-zA-Z_$][\w$]*)([,}])/g, (match, val, end) => { const reservedWords = ['true', 'false', 'null']; return reservedWords.includes(val) ? match : `: "${val}"${end}`; }); // 4. 转换为JSON对象并输出 const result = JSON.parse(jsonValidStr); console.log(JSON.stringify(result, null, 2));
输出结果
{ "keyOne": "valueOne", "KeyTow": [10, true, null, "10%"], "keyThree": { "hello": "hi" } }
扩展说明
- 如果需要匹配带小数点的百分比(如
12.5%),正则(\d+\.?\d*)%已经支持这种情况。 - 若字符串中存在更复杂的嵌套或特殊字符,可以根据实际需求调整正则规则,或使用更健壮的第三方库(如
json5)来处理非标准JSON格式。
内容的提问来源于stack exchange,提问作者ash
相关产品推荐
相关产品推荐

