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

Node.js ES6中如何解析含未转义属性的类JSON字符串?

解决类JSON字符串的解析问题

首先,你遇到的问题很典型:这个字符串不是标准JSON,所以JSON.parse肯定会报错。标准JSON有严格的语法规则:

  • 所有属性名必须用双引号包裹
  • 字符串值必须用双引号包裹
  • 只有null/true/false和数字可以不用引号

你的字符串里属性名(比如prop1)没加引号,字符串值(比如SOME-VALUE、日期字符串)也没有引号,完全不符合标准JSON的要求,自然会触发语法错误。

下面给你两种可靠的解决思路:

思路1:手动转换为标准JSON(无依赖)

如果你的类JSON格式比较规范(比如值里没有逗号、括号这类特殊字符),可以用正则表达式把它转换成标准JSON,再用JSON.parse解析。

示例代码:

function convertToValidJson(classJsonStr) {
  // 第一步:给所有属性名加上双引号,把 prop= 替换为 "prop":
  let validJson = classJsonStr.replace(/(\w+)=/g, '"$1":');
  
  // 第二步:给非关键字、非数字的字符串值加上双引号
  validJson = validJson.replace(/:([^\s,\{\}\[\]]+)(?=[,\}\]])/g, (match, value) => {
    // 跳过null/true/false和数字类型的值
    const allowedUnquoted = ['null', 'true', 'false'];
    if (allowedUnquoted.includes(value) || !isNaN(Number(value))) {
      return match;
    }
    // 其他情况给值加上双引号
    return `:"${value}"`;
  });
  
  return validJson;
}

// 使用示例
const A = "{prop1=null, prop2=SOME-VALUE, prop3=[{prop4=2018-04-13T19:07:47.008Z}]}";
try {
  const validJson = convertToValidJson(A);
  const parsedData = JSON.parse(validJson);
  console.log('解析结果:', parsedData);
} catch (err) {
  console.error('转换或解析失败:', err.message);
}

这种方法的优点是不需要额外安装依赖,但要注意:如果你的值里包含逗号、空格或者括号,正则可能会匹配出错,这时候就需要更复杂的处理逻辑。

思路2:使用宽松的JSON解析库(更可靠)

如果你的类JSON格式比较复杂,或者不想手动处理边缘情况,推荐使用专门支持宽松格式的解析库,比如jsonic——它专门用来解析这种类似JSON但语法更灵活的字符串。

步骤:

  1. 安装依赖:
npm install jsonic
  1. 解析示例:
const jsonic = require('jsonic');

const A = "{prop1=null, prop2=SOME-VALUE, prop3=[{prop4=2018-04-13T19:07:47.008Z}]}";
try {
  const parsedData = jsonic(A);
  console.log('解析结果:', parsedData);
} catch (err) {
  console.error('解析失败:', err.message);
}

jsonic支持无引号的属性名、无引号的字符串值(只要值不包含分隔符),甚至能处理一些更灵活的语法,比手动写正则更稳定。

⚠️ 注意:不要用原生的eval()来解析,因为如果字符串里包含恶意代码,eval()会直接执行,存在安全风险。即使是所谓的"安全eval"库,也可能因为值被当成变量而报错(比如SOME-VALUE会被识别为未定义的变量),不如专门的解析库可靠。

内容的提问来源于stack exchange,提问作者Tomasz GORKA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:41:05