MTG JSON转CSV失败求助:R代码执行出现列大小兼容错误
解决MTG JSON转CSV的R语言报错问题
错误原因
你遇到的tibble列大小不兼容错误,根源是原JSON的结构特性:每个卡牌名称作为键,对应的值是包含卡牌信息的列表,部分特殊卡牌(比如多面牌)的列表长度大于1。你直接将整个结构展平后转数据框,会把卡牌名作为列,不同列的行数(列表长度)不一致,而tibble不允许这种列维度不匹配的情况。
修正后的代码
library(jsonlite) library(tidyverse) # 直接读取JSON文件,无需手动读行 json_data <- fromJSON("data.json") # 提取核心的卡牌数据列表 card_list <- json_data$data # 将每个卡牌的信息列表转为数据框,合并所有行,.id参数保留卡牌名称 df <- map_dfr(card_list, ~as.data.frame(.x), .id = "card_name") # 展平嵌套结构(比如identifiers、purchaseUrls这类子对象) df_flattened <- flatten(df) # 写入CSV文件 write_csv(df_flattened, "mtg_cards.csv")
代码说明
- 读取JSON:直接用
fromJSON读取文件,比readLines更简洁,能自动解析完整的JSON结构。 - 转换为长格式数据框:用
map_dfr遍历每个卡牌对应的信息列表,将其转为数据框并按行合并,.id = "card_name"会新增一列记录卡牌名称,避免丢失原键信息。 - 展平嵌套列:
flatten处理像identifiers、purchaseUrls这类嵌套的子对象,把它们的属性拆成单独的列(比如identifiers_scryfallOracleId),符合CSV的扁平结构要求。 - 写入CSV:
write_csv生成最终的CSV文件,每一行对应一个卡牌条目,列是卡牌的各类属性。
内容的提问来源于stack exchange,提问作者KlunkerPunker
相关产品推荐
相关产品推荐

