如何处理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
相关产品推荐
相关产品推荐

