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

R语言中如何将该类JSON结构代码转换为data.frame数据框

报错原因

触发解析错误的核心原因是page_2存储的是JavaScript对象字面量格式文本,并非标准JSON:按照JSON规范,所有对象的键名(即当前文本中的position/type/codEsta/monEsta/htmlPag字段)必须使用双引号包裹,而当前文本里的键名直接裸露书写,jsonlite::fromJSON()在读取到无引号的position键起始位置时,就会抛出非法字符的词法解析错误。

处理步骤

通过正则补全键名双引号,把类JSON修正为标准格式后再解析,最后拆分嵌套的经纬度字段,即可得到规整的data.frame对象,代码如下:

# 1. 文本预处理:给所有裸键名补上双引号,转为标准JSON
standard_json <- page_2 %>%
  str_replace_all("(?<=[{,])\\s*([a-zA-Z0-9_]+)\\s*:", ' "\\1":')
  # 若文本中存在单引号包裹的字符串值,可取消下一行注释统一替换为双引号
  # str_replace_all("'", '"')

# 2. 解析标准JSON
raw_parsed <- jsonlite::fromJSON(standard_json, flatten = TRUE)

# 3. 展平嵌套结构,生成规整数据框
station_df <- as_tibble(raw_parsed) %>%
  dplyr::mutate(
    lon = purrr::map_dbl(position, ~.x[1]),
    lat = purrr::map_dbl(position, ~.x[2])
  ) %>%
  # 不需要保留原始嵌套坐标列可执行下行
  dplyr::select(-position)
逻辑说明
  • 正则匹配规则为定位{或,后紧跟的、冒号前的合法字段名,这类位置的字符一定是JSON键,包裹双引号后完全符合JSON规范,不会再触发解析错误
  • 解析时添加flatten = TRUE参数可自动打平嵌套结构,减少后续列表处理成本
  • position字段解析后默认是列表列(每个元素是长度为2的经纬度数值向量),用purrr::map_dbl分别提取经度、纬度生成独立列后,就是标准的二维data.frame结构,7条站点记录可全部正常读入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:21:45