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

Node.js构建Google Pagespeed客户端遇JSON语法错误,无法提取ruleGroups

解决Google Pagespeed客户端的JSON语法错误与数据提取问题

Hey there! Let's figure out why you're running into these JSON syntax errors and get that ruleGroups data extracted properly. Let's break this down step by step:

第一步:先搞定JSON语法错误的根源

JSON解析失败肯定是拦在前面的首要问题,常见原因和排查方法如下:

  • 响应未正确解压:Google Pagespeed API默认返回gzip压缩的响应,如果你的Node.js请求库(比如fetch或axios)没自动处理解压,拿到的就是乱码文本,自然解析失败。比如用axios的话,确保配置了压缩支持:
    const axios = require('axios');
    const response = await axios.get('YOUR_PAGESPEED_API_URL', {
      headers: { 'Accept-Encoding': 'gzip, deflate' },
      responseType: 'json' // 让库自动解析JSON
    });
    
  • 拿到的是JSONP而非纯JSON:如果误调用了JSONP版本的接口,响应会被包裹在函数调用里(比如pagespeed.callback({...})),这时候需要先剥离函数包裹部分,提取中间的JSON字符串再解析。
  • 响应含多余字符:比如BOM(字节顺序标记)、冗余换行/空格,可以先用rawResponse.trim()清理文本后再尝试解析。

快速定位错误的小代码:

const rawResponse = /* 你获取到的原始响应文本 */;
try {
  const parsedData = JSON.parse(rawResponse);
  console.log("JSON解析成功!");
} catch (err) {
  console.error("错误位置:", err.position);
  console.error("错误信息:", err.message);
}

这个报错信息能帮你精准定位问题,比如是引号未闭合还是多了逗号。

第二步:确认Pagespeed API版本(关键!)

这很可能是你提取ruleGroups失败的核心原因:

  • v4版本:接口地址类似https://www.googleapis.com/pagespeedonline/v4/runPagespeed,响应里确实存在ruleGroups字段。
  • v5版本:接口地址为https://www.googleapis.com/pagespeedonline/v5/runPagespeed,已经移除了ruleGroups,替换为lighthouseResult.categories(比如performance、accessibility等分类)。

如果你调用的是v5却还在找ruleGroups,肯定拿不到数据!先核对你的接口URL版本。

第三步:正确提取目标数据

当JSON解析成功后,提取数据就简单了:

若使用v4版本

可以直接访问对象属性,或者用jsonpath:

const jsonpath = require('jsonpath');

// 假设parsedData是解析后的JSON对象
const ruleGroups = parsedData.ruleGroups;
// 或者用jsonpath查询
const ruleGroupsFromPath = jsonpath.query(parsedData, '$.ruleGroups');

console.log(ruleGroups);

若使用v5版本

需要调整到对应的字段:

// 获取性能分类的评分与规则详情
const performanceCategory = parsedData.lighthouseResult.categories.performance;
console.log("性能评分:", performanceCategory.score);
console.log("性能规则列表:", performanceCategory.auditRefs);

最后小提示

如果还是有问题,先打印完整的解析后JSON对象(console.log(JSON.stringify(parsedData, null, 2))),核对结构是否符合预期——有时候API会微调字段名或嵌套层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:53:38