R中使用jsonlite读写JSON文件输出与原结构不一致问题求解
jsonlite读写JSON结构不一致的解决方案
问题本质
该问题是jsonlite的自动类型简化逻辑和异构JSON结构不匹配导致的:
- 当
simplifyVector = T时,jsonlite会尝试将结构相似的JSON对象数组合并为R数据框,自动补全所有对象的键作为数据框列,缺失值对应位置就会生成空字段 - 当
simplifyVector = F时,所有JSON数组会被保留为R列表,默认序列化时长度为1的原子元素会被包裹为嵌套数组,导致输出结构多出一层嵌套
最优解决方案
使用全关闭自动简化+自动拆箱的参数组合,不需要手动修改结构,即可保证读写结构完全一致:
library(jsonlite) id = "test3" setwd("/path/") # 读取时完全关闭所有自动简化逻辑,避免异构结构被强行转换 myjs = fromJSON( paste0(id,".json"), simplifyVector = FALSE, simplifyDataFrame = FALSE, simplifyMatrix = FALSE ) # 写入时开启自动拆箱,消除多余的嵌套数组 write_json( myjs, paste0(id,"_.json"), pretty = TRUE, auto_unbox = TRUE )
参数说明
simplifyVector = FALSE:关闭JSON数组到R向量的自动转换simplifyDataFrame = FALSE:关闭JSON对象数组到R数据框的自动转换,避免补全缺失字段simplifyMatrix = FALSE:关闭JSON多维数组到R矩阵的自动转换auto_unbox = TRUE:自动将R中长度为1的原子向量转换为JSON标量,消除多余的嵌套层级
内容的提问来源于stack exchange,提问作者Nimrookie
相关产品推荐
相关产品推荐

