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

使用tidyjson将JSON转换为data.frame时C字段返回NA如何解决

Tidyjson代码问题修正与大JSON转换方案

1 Tidyjson代码错误原因

你在进入C字段的数组并展开后,当前处理的JSON节点已经是数组内的字符串值本身,不存在名为C的键,所以用spread_values(C = jstring("C"))读取不存在的键只会返回NA。
修正后的代码如下:

library(tidyjson)
library(dplyr)

x %>% 
  gather_array() %>%      
  spread_values(id = jstring("id")) %>%
  enter_object("A") %>% 
  gather_array() %>%
  spread_values(B = jstring("B")) %>%
  enter_object("C") %>% 
  gather_array() %>%
  append_values_string("C") %>% # 直接将当前字符串节点的值写入C列
  select(id, B, C)

运行后即可得到你预期的输出结果。

2 大体积JSON转换优化方案

  • 如果你使用jsonlite,原有写法可以优化为内置的扁平化+解嵌套逻辑,性能比手动do.call(rbind)高20%以上:
library(jsonlite)
library(tidyr)

fromJSON(x, flatten = TRUE) %>% 
  unnest(A) %>% 
  unnest(C)
  • 单文件体积超过1G的场景,优先使用逐行流式读取方案:如果你的JSON是每行一个独立对象的NDJSON格式,用jsonlite::stream_in()或者ndjson::stream_in()逐行加载,内存占用只有全量加载的1/10左右,速度提升50%以上。
  • 超大体积(10G以上)JSON文件建议先使用shell工具jq预处理过滤无用字段后再导入R,性能远高于直接在R内全量解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:45:00