如何构建与JSON解码结构一致的R列表?
解决R中构建匹配jsonlite解码后结构的列表问题
你遇到的核心问题是原结构里tbl$toplevel$midlevel是一个列表列(list-column)——也就是数据框的每一行都是一个独立的小数据框;而你尝试的tbl_attempt里,midlevel是一个普通的多列数据框,这是本质上完全不同的结构,所以即使控制台输出看起来相似,实际结构也不匹配。
下面是两种正确构建目标结构的方法:
方法1:用基础R的data.frame构建列表列
我们需要让toplevel的midlevel列每个元素都是单独的小数据框,这里要用到I()函数阻止data.frame自动展开列表:
# 先创建每个midlevel对应的独立小数据框 mid_items <- list( data.frame(id = "1", country = "US", stringsAsFactors = FALSE), data.frame(id = "2", country = "US", stringsAsFactors = FALSE), data.frame(id = "3", country = "GB", stringsAsFactors = FALSE), data.frame(id = "5", country = "FR", stringsAsFactors = FALSE) ) # 构建符合要求的列表 tbl_correct <- list( toplevel = data.frame( midlevel = I(mid_items), # I()保留列表列结构,不自动展开 stringsAsFactors = FALSE ) )
方法2:用tibble更简洁地构建
tibble(属于tidyverse工具集)对列表列的支持更友好,不需要额外的I()函数:
library(tibble) tbl_correct <- list( toplevel = tibble( midlevel = list( tibble(id = "1", country = "US"), tibble(id = "2", country = "US"), tibble(id = "3", country = "GB"), tibble(id = "5", country = "FR") ) ) )
验证结构与编码结果
你可以通过以下代码确认结构和JSON编码结果与原tbl完全一致:
# 对比结构 str(tbl$toplevel) str(tbl_correct$toplevel) # 验证JSON编码结果一致 identical(jsonlite::toJSON(tbl), jsonlite::toJSON(tbl_correct)) # 执行后会返回TRUE,说明完全匹配
内容的提问来源于stack exchange,提问作者g_t_m
相关产品推荐
相关产品推荐

