R中如何将包含列表列的数据框转换为JSON并保存?
保存已生成的大体积JSON对象的方法
你已经通过toJSON()生成了JSON字符串对象x,直接写入本地文件即可,优先使用writeLines函数,指定编码避免乱码,大文件场景下执行效率很高:
# 直接写入普通JSON文件 writeLines(x, con = "regiones.json", useBytes = TRUE)
如果需要缩小分享体积,可以直接写入gzip压缩格式,大部分数据分析工具都支持直接读取该格式的文件,无需手动解压:
con <- gzfile("regiones.json.gz", open = "w", encoding = "UTF-8") writeLines(x, con) close(con)
其他推荐实现方案
- 一步完成转换和导出:可以直接用jsonlite自带的
write_json()函数,不需要提前把JSON字符串存入内存,超大数据框场景下内存占用更低:
jsonlite::write_json( x = regiones, path = "regiones.json", pretty = TRUE, auto_unbox = TRUE, # 自动将单值列转为非数组格式,符合通用JSON规范 useBytes = TRUE )
auto_unbox参数不会影响你数据框里的列表类型列(比如geometry列),只会将codigo_region这类单值字段从["16"]转为"16",和你当前控制台输出的结构完全一致。
- 地理数据专用方案:从你输出的geometry字段判断,你的regiones大概率是sf类地理数据框,更推荐直接用sf包导出标准GeoJSON格式,兼容性更强,所有GIS工具、前端可视化库都可直接识别:
sf::st_write(regiones, "regiones.geojson", delete_dsn = TRUE)
这个方法不需要额外处理geometry列的结构,导出的文件完全符合OGC地理数据标准,比手动转JSON更稳妥。
内容的提问来源于stack exchange,提问作者Wolkuz
相关产品推荐
相关产品推荐

