You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含百分比符号的类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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:50:25