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

在RStudio中以UTF编码将JSON转CSV的问题求助

解决R中JSON转换为数据框的维度反转问题

问题分析

你遇到的核心问题是JSON数据的结构与R中旧转换逻辑不匹配:返回的JSON是13个变量(每个变量对应998个观测值),但旧方法(RJSONIO+ldply/do.call)错误地将每个变量当作一行,导致维度完全反转。

推荐解决方案:使用jsonlite包

jsonlite是更现代、适配tabular数据的JSON处理包,能自动识别这类"列优先"的JSON结构,直接生成正确维度的数据框。

步骤1:安装并加载jsonlite

install.packages("jsonlite")
library(jsonlite)

步骤2:直接读取URL并转换为数据框

无需先保存到本地文件,直接从URL读取并处理:

# 目标数据URL
data_url <- "https://dackkms.gov.in/Account/API/kKMS_QueryData.aspx?StateCD=01&DistrictCd=0108&Month=1&Year=2024"

# 读取并转换为数据框
df <- fromJSON(data_url)

验证结果

运行dim(df)应该返回998 13,即998行(观测值)和13列(变量)。

为什么旧方法失效?

  • RJSONIO的fromJSON对这类结构的解析逻辑与jsonlite不同,会将每个变量的向量列表当作独立的行元素。
  • ldply会进一步将每个顶级列表元素拆分为行,最终导致行和列完全反转。
  • 手动转置矩阵时,由于原数据的属性(如列名、数据类型)丢失,转换为数据框后出现异常。

备选方案(如果必须用RJSONIO)

如果因环境限制无法使用jsonlite,可以手动将列表转换为数据框:

library(RJSONIO)
json_data <- fromJSON("data.json")
# 将每个列表元素作为列,合并为数据框
df <- as.data.frame(lapply(json_data, unlist))

运行后同样会得到998行、13列的数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:42:40