$.getJSON能否处理带有注释的JSONC文件?
解决jQuery解析带注释JSONC的问题
问题根源
$.getJSON本质是封装了jQuery的Ajax请求,默认会把响应内容按标准JSON规则解析,但标准JSON并不支持//或/* */类型的注释,所以带注释的JSONC文件会触发解析错误,导致脚本失效。
不用切换原生JS的解决方案
你可以用$.ajax替代$.getJSON,先获取JSONC的文本内容,手动清理注释后再解析成JSON,步骤如下:
- 写一个注释清理函数(注意跳过字符串内部的类似注释符号,避免误删内容):
function stripJSONComments(jsoncText) { // 移除多行注释 /* ... */ jsoncText = jsoncText.replace(/\/\*[\s\S]*?\*\//g, ''); // 移除单行注释 // ...,同时跳过字符串内部的// return jsoncText.replace(/\/\/.*(?=(["'])(?:[^\\]|\\.)*?\1|$)/g, ''); }
- 用
$.ajax获取文本并处理:
$.ajax({ url: 'filename.jsonc', dataType: 'text', // 先获取纯文本 success: function(text) { try { const cleanedContent = stripJSONComments(text); const jsonData = JSON.parse(cleanedContent); // 这里执行你原来的业务逻辑 // do stuff } catch (error) { console.error('JSONC解析出错:', error); } }, error: function(xhr, status, err) { console.error('请求失败:', err); } });
备选方案(后端配合)
如果有权限修改后端逻辑,可以在服务器端用JSONC解析库(比如Node.js的jsonc-parser)将带注释的JSONC转换成标准JSON后再返回前端,这样前端依然可以直接用$.getJSON请求。
为什么不能直接用$.getJSON?
$.getJSON默认强制dataType: 'json',jQuery会自动调用JSON.parse()按标准JSON规则解析响应,而注释在标准JSON中属于非法语法,必然导致解析失败。
内容的提问来源于stack exchange,提问作者BevansDesign
相关产品推荐
相关产品推荐

