我有一个填充了键值对的大型数据文件。键是一个ID,值是一个巨大的json对象。我一直在尝试将此数据文件转换为R中的df,方法是将数据作为2列表导入,然后将值转换为数据帧。
即使在我验证了json之后,我仍然会收到此错误。
错误:词法错误:json文本中的字符串无效。
[{ f: { SEQNUM: [ 455043, 455044, (right here) ------^
下面是我的代码
part00013 <- read.table(PatientData, sep = '\t', header = F, as.is = T)
colnames(part00013) <- c('k','v')
make_indexDateLists <- function(x) {
# x['v'] <- lapply(x['v'], function(y) as.character(y))
# x['v'] <- lapply(x['v'], function(y) substr(y,1, nchar(y)-1 ))
# x['v'] <- lapply(x['v'], function(y) substr(y,2,nchar(y)))
x["v"] <- lapply(as.character(x["v"]), function(y) jsonlite::fromJSON(y,simplifyVector = T))
#do assignpatienttocohorts
x["v"] <- lapply(x["v"], function(y) RJSONIO::toJSON(y))
cbind(x$k, x$v)
}
make_indexDateLists(part00013)
这是一个示例文件https://drive.google.com/open?id=0B6hKduYaYwdJQ3BwbUpNSW9EZk0
答案 0 :(得分:1)
它是无效的JSON,但您可以将其转换为有效的JSON:
library(stringi)
library(jsonlite)
library(tidyverse)
tmp <- readLines("oneline_part00013")
parts <- stri_split_fixed(tmp, "\t", 2)[[1]]
fromJSON(parts[2], flatten = FALSE) %>%
glimpse()
## Observations: 1
## Variables: 7
## $ f <data.frame> 455043, 455044, 455045, 455046, 455047, 455048, 45504...
## $ s <data.frame> 246549, 246550, 246551, 246552, 246553, 246554, 24655...
## $ i <data.frame> 8224, 8788, 770102, 30, 10, 30, 3301, 3301, 3301, 192...
## $ d <data.frame> 1114386, 1114387, 1114388, 1114389, 1114390, 1114391,...
## $ o <data.frame> 162072527, 162072528, 162072529, 162072530, 162072531...
## $ t <data.frame> 408352, 408353, 408354, 408355, 408356, 408357, 40835...
## $ a <data.frame> 36527, 42259, 35562, 42458, 39119, 30, 10, 30, 20, 30...
flatten = TRUE
将取消嵌套所有data.frame
列(最终会以450多列的方式结束)