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

如何处理jQuery.getJSON获取的第三方带语法错误的JSON数据?

解决方法

因为jQuery.getJSON会自动尝试解析JSON,遇到语法错误时直接静默失败,无法获取任何数据。要保留正常数据,你需要先拿到原始文本修复语法,再解析过滤,具体步骤如下:

1. 改用$.ajax获取原始文本

放弃getJSON,用$.ajax指定dataType: 'text',这样能拿到未解析的原始字符串,避免解析失败直接丢弃数据:

function fetchAndProcessData() {
  $.ajax({
    url: '你的目标XSL/JSON文件地址',
    dataType: 'text',
    success: function(rawText) {
      processRawJSON(rawText);
    },
    error: function(xhr, status, error) {
      console.error('请求失败:', error);
    }
  });
}

// 定期调用刷新数据,示例为每30秒一次
setInterval(fetchAndProcessData, 30000);

2. 修复JSON语法错误并过滤无效对象

针对你遇到的"title": -,这类无效值,用正则表达式替换成合法的JSON值(比如null),再通过try-catch确保解析安全,最后过滤掉存在问题的对象:

function processRawJSON(rawText) {
  // 修复类似 "key": -, 或 "key": - 的无效值
  let fixedText = rawText.replace(/"(\w+)":\s*-(?=[,\s}])/g, '"$1": null');
  
  // 尝试解析修复后的JSON
  let parsedData;
  try {
    parsedData = JSON.parse(fixedText);
  } catch (e) {
    console.error('修复后仍无法解析JSON:', e);
    return;
  }
  
  // 过滤source数组中存在问题的对象(比如title为null的项)
  if (parsedData?.stats?.source) {
    parsedData.stats.source = parsedData.stats.source.filter(item => {
      // 可根据需求自定义过滤规则,这里排除title为null或未定义的对象
      return item.title !== null && typeof item.title !== 'undefined';
    });
  }
  
  // 处理后的正常数据,可在这里做业务逻辑操作
  console.log('可用数据:', parsedData);
}

额外说明

  • 正则规则可根据实际遇到的错误调整,比如遇到其他无效格式(如未加引号的字符串),可补充对应的替换逻辑。
  • try-catch包裹解析步骤,避免修复不彻底导致脚本崩溃。
  • 过滤步骤可按需调整,如果你不需要剔除错误对象,仅保留能解析的数据,可跳过过滤环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:37:00