Firefox内置JSON Viewer能否启用宽松解析支持非标准JSON?
解决Firefox JSON Viewer不支持非标准JSON(无引号属性)的问题
很遗憾,Firefox目前没有内置的about:config设置能让原生JSON Viewer支持属性名不带引号的非标准JSON。这是因为Firefox的JSON解析器严格遵循ECMAScript标准,只识别符合规范的JSON结构——而不带引号的属性名实际上属于JavaScript对象字面量,并非标准JSON范畴。
不过你可以通过以下两种实用方法绕过这个限制:
方法一:用用户脚本预处理响应
你可以借助Tampermonkey这类用户脚本管理器,编写一个脚本拦截服务器返回的非标准JSON内容,自动给属性名补上引号,再交给浏览器处理。
举个适配简单场景的脚本示例(复杂嵌套结构可能需要更严谨的解析逻辑,你可以根据实际返回内容调整):
// ==UserScript== // @name Fix Unquoted JSON for Firefox Viewer // @match *://your-target-domain.com/* // 替换成你的目标域名,或用*匹配所有站点 // @grant none // ==/UserScript== (function() { 'use strict'; // 拦截XMLHttpRequest请求 const originalXHR = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url) { this.addEventListener('load', function() { try { JSON.parse(this.responseText); } catch (e) { // 给无引号的属性名添加引号(简单正则匹配) const fixedJSON = this.responseText.replace(/(\w+):/g, '"$1":'); Object.defineProperty(this, 'responseText', { value: fixedJSON }); } }); originalXHR.apply(this, arguments); }; // 拦截fetch请求 const originalFetch = fetch; window.fetch = async function(resource, options) { const response = await originalFetch(resource, options); if (response.headers.get('content-type')?.includes('json')) { const text = await response.text(); try { JSON.parse(text); return response; } catch (e) { const fixedJSON = text.replace(/(\w+):/g, '"$1":'); // 构造新的响应对象返回 return new Response(fixedJSON, { status: response.status, statusText: response.statusText, headers: response.headers }); } } return response; }; })();
安装步骤:
- 先在Firefox附加组件商店安装Tampermonkey扩展
- 点击Tampermonkey图标,选择「创建新脚本」
- 替换默认代码为上面的脚本,修改
@match规则匹配你的目标网站 - 保存后刷新页面,Firefox的JSON Viewer就能识别处理后的标准JSON了
方法二:使用第三方JSON查看扩展
市面上有不少第三方扩展支持宽松的JSON解析,比如JSON Viewer Pro、JSON Formatter & Validator等。这些扩展可以替代Firefox的原生Viewer,自动识别并格式化带无引号属性的非标准JSON内容。你只需要在Firefox附加组件商店搜索安装即可,这类工具基本都能满足你的需求。
需要注意的是,宽松解析可能会存在少量歧义风险,但针对你对接的特定服务器返回内容,完全可以正常使用。
内容的提问来源于stack exchange,提问作者eidylon
相关产品推荐
相关产品推荐

