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

R语言解析Google Lighthouse PageSpeed JSON转dataframe报错

报错原因

触发json_str must be a character string(json_str必须为字符串类型)报错的核心原因有两个:

  1. str(max.level = 2)的作用仅为在控制台打印R对象的层级结构,返回值为NULL,根本不会输出JSON格式字符串,传入fromJSON()不符合参数要求
  2. 调用httr::content()时默认已经把API返回的JSON响应解析为R原生嵌套列表,不需要再重复调用JSON解析函数
正确实现(仅保留速度类指标)

不需要加载rjson包,和jsonlite功能重复容易引发函数冲突,直接按以下逻辑处理即可:

library(httr)
library(jsonlite)
library(tidyverse)

# 构造API请求地址,加参数&strategy=mobile可获取移动端测速结果
url <- "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://www.google.com"

# 稳定获取解析后的JSON数据
raw_json <- httr::GET(url) %>% 
  httr::content(as = "text", encoding = "UTF-8") %>% 
  fromJSON()

# 定位测速指标存储节点
all_audits <- raw_json$lighthouseResult$audits

# 定义需要提取的速度类指标ID,过滤SEO、无障碍、最佳实践等非速度类指标
target_speed_metrics <- c(
  "first-contentful-paint", # 首次内容绘制FCP
  "largest-contentful-paint", # 最大内容绘制LCP
  "total-blocking-time", # 总阻塞时间TBT
  "speed-index", # 速度指数SI
  "cumulative-layout-shift", # 累积布局偏移CLS
  "interactive", # 可交互时间TTI
  "max-potential-fid" # 最大潜在首次输入延迟FID
)

# 整理为规整dataframe
df_pagespeed <- map_dfr(target_speed_metrics, function(metric_id){
  curr_metric <- all_audits[[metric_id]]
  tibble(
    metric_name = curr_metric$title,
    metric_id = metric_id,
    score = curr_metric$score,
    display_value = curr_metric$displayValue,
    numeric_value = ifelse(is.null(curr_metric$numericValue), NA, curr_metric$numericValue),
    unit = ifelse(is.null(curr_metric$numericUnit), NA, curr_metric$numericUnit)
  )
})
补充说明
  • 若需要提取其他自定义指标,直接在target_speed_metrics向量里追加对应指标的ID即可
  • 批量测试多个网址时,把上述逻辑封装为函数,传入不同url做映射调用即可,核心提取逻辑不需要调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:42:16