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

JavaScript中解析类JSON数组字符串报错,求解决方法

解决JSON.parse解析非标准JSON字符串的问题

你提供的字符串并非标准JSON格式,直接用JSON.parse会报错,核心问题有三个:

  • JSON要求所有键名和字符串值必须使用双引号,但你的字符串用了单引号
  • datetime.date(2024, 2, 14)不是合法的JSON值,JSON不支持这种Python风格的日期字面量
  • 整个数组外层被额外的双引号包裹,导致解析时被识别为单个字符串而非数组

分步修复方案

  1. 移除外层多余的双引号
    原字符串最外层的"会让整个数组被当成普通字符串,先去掉:

    let rawStr = "[{'RK': 1, 'RN': 'CB6402AT', ...}]"; // 你的原始字符串
    rawStr = rawStr.replace(/^"|"$/g, '');
    
  2. 替换单引号为双引号
    把所有单引号替换成双引号,符合JSON语法要求:

    rawStr = rawStr.replace(/'/g, '"');
    
  3. 转换Python日期格式为JSON兼容的ISO日期字符串
    用正则匹配datetime.date(YYYY, MM, DD)格式的内容,替换成"YYYY-MM-DD"格式的字符串:

    rawStr = rawStr.replace(/datetime\.date\((\d{4}), (\d{1,2}), (\d{1,2})\)/g, (match, year, month, day) => {
      // 补零确保月份和日期是两位
      month = month.padStart(2, '0');
      day = day.padStart(2, '0');
      return `"${year}-${month}-${day}"`;
    });
    
  4. 解析修复后的字符串
    现在可以正常用JSON.parse解析了:

    try {
      const data = JSON.parse(rawStr);
      console.log(data);
    } catch (err) {
      console.error('解析失败:', err);
    }
    

完整代码示例

// 原始字符串
let rawStr = "\"[{'RK': 1, 'RN': 'CB6402AT', 'Marka': 'Zeleno', 'Model': 'Suzuki', 'G_PR': 1997, 'KM': 10000, 'Kupe': 'A', 'Rama': 'B', 'Dvigatel': 'C', 'Descr': datetime.date(2024, 2, 14), 'Problem': 'нагънат преден ляв калник', 'R_DATA': 'не пали', 'ime': 'Пешо', 'telefon': '0881111111'}, {'RK': 2, 'RN': 'CB8888VW', 'Marka': 'Volkswagen', 'Model': 'Passat', 'G_PR': 2001, 'KM': 500000, 'Kupe': 'D', 'Rama': 'E', 'Dvigatel': 'F', 'Descr': datetime.date(2023, 6, 8), 'Problem': 'счупен преден капак', 'R_DATA': 'не пали', 'ime': 'Гошо', 'telefon': '0882222222'}, {'RK': 3, 'RN': 'яяяяя', 'Marka': 'уу', 'Model': 'яя', 'G_PR': 111, 'KM': 1110, 'Kupe': '111', 'Rama': '11', 'Dvigatel': '1111', 'Descr': datetime.date(2025, 5, 2), 'Problem': '1111', 'R_DATA': '1111', 'ime': 'Пешо', 'telefon': '0881111111'}]\"";

// 步骤1:移除外层双引号
rawStr = rawStr.replace(/^"|"$/g, '');

// 步骤2:替换单引号为双引号
rawStr = rawStr.replace(/'/g, '"');

// 步骤3:转换Python日期为ISO格式字符串
rawStr = rawStr.replace(/datetime\.date\((\d{4}), (\d{1,2}), (\d{1,2})\)/g, (_, y, m, d) => {
  return `"${y}-${m.padStart(2, '0')}-${d.padStart(2, '0')}"`;
});

// 步骤4:解析JSON
try {
  const parsedData = JSON.parse(rawStr);
  console.log('解析结果:', parsedData);
} catch (error) {
  console.error('解析错误:', error);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:36:04