在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
相关产品推荐
相关产品推荐

