如何将ID位于大括号外无引号的JSON格式文件导入R
处理非标准行JSON文件导入R的解决方案
你可以直接在R内完成文本处理+数据导入,无需修改原始文件,操作步骤如下:
方法1:R内直接处理(推荐)
- 先安装并加载JSON处理依赖包
install.packages("jsonlite") library(jsonlite)
- 逐行读取原始文件并做格式转换
# 替换为你的实际文件路径 raw_lines <- readLines("your_data_file.txt") processed_json <- lapply(raw_lines, function(x) { # 定位每行第一个左大括号的位置,拆分ID和JSON主体 brace_idx <- regexpr("{", x, fixed = T)[1] id <- trimws(substr(x, 1, brace_idx - 1)) json_body <- substr(x, brace_idx, nchar(x)) # 拼接为合法JSON结构,自动给ID加双引号 paste0('{"id": "', id, '", ', substring(json_body, 2)) }) # 直接从处理后的文本导入为数据框 result_df <- stream_in(textConnection(processed_json))
上述方法兼容性更强,哪怕ID前后存在多余空格也可以正常识别。
方法2:预先转换原始文件(适合大文件场景)
如果你需要先把原文件转成标准JSON行格式,可以用命令行工具快速处理:
- Linux/Mac 环境用sed命令:
sed -E 's/^([^ ]+) +(.*)/{"id": "\1", \2/' 原始文件.txt > 标准格式.json
- Windows 环境用PowerShell命令:
Get-Content 原始文件.txt | ForEach-Object { $parts = $_ -split ' ', 2 '{"id": "{0}", {1}' -f $parts[0], $parts[1] } | Out-File 标准格式.json
转换完成后直接用jsonlite::stream_in("标准格式.json")即可正常导入。
内容的提问来源于stack exchange,提问作者opposity
相关产品推荐
相关产品推荐

