如何读取JSONL格式文件并转换为R语言数据框?
读取JSONL格式文件并转换为R数据框
标准JSON文件的常规读取方式
读取标准JSON数组格式的文件,可使用以下代码:
library(jsonlite) json_text <- readLines("tect.json", warn = FALSE, encoding = "UTF-8")
解析JSON数据
将读取的内容合并后完成解析:
json_data <- fromJSON(txt = paste(json_text, collapse = ""))
这种方法适用于文件内容为标准JSON数组的场景,示例格式如下:
[ { "id": 1, "name": "Apple", "color": "red", "price": 0.99 }, { "id": 2, "name": "Banana", "color": "yellow", "price": 0.5 }, { "id": 3, "name": "Orange", "color": "orange", "price": 0.75 } ]
JSONL格式文件的读取问题
如果文件是JSONL格式(每行一个独立的JSON对象),示例内容如下:
{"id": 1, "name": "Apple", "color": "red", "price": 0.99 } {"id": 2, "name": "Banana", "color": "yellow", "price": 0.5 } {"id": 3, "name": "Orange", "color": "orange", "price": 0.75 }
使用上述标准JSON的读取方法会触发解析错误:
Error: parse error: trailing garbage
nge":"
解决方案
针对JSONL格式,有两种常用处理方式:
方法1:使用stream_in直接读取
jsonlite包的stream_in函数专门适配流式JSON(包括JSONL),可直接将文件转换为数据框:
library(jsonlite) # 建立文件连接 conn <- file("tech.json", encoding = "UTF-8") # 流式读取并解析为数据框 jsonl_df <- stream_in(conn) # 关闭文件连接 close(conn)
该方法无需手动处理每行内容,效率较高,适合大文件场景。
方法2:逐行解析后合并
如果需要对每行数据做预处理(比如过滤无效行),可逐行读取解析后合并为数据框:
library(jsonlite) # 读取所有行 lines <- readLines("tech.json", warn = FALSE, encoding = "UTF-8") # 逐行解析每个JSON对象 json_list <- lapply(lines, fromJSON) # 将列表转换为数据框 jsonl_df <- do.call(rbind, json_list)
内容的提问来源于stack exchange,提问作者Erik Brole
相关产品推荐
相关产品推荐

