在R中将JSON转换为DF

时间:2017-06-02 12:49:06

标签: json r parsing

我有一个填充了键值对的大型数据文件。键是一个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

1 个答案:

答案 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多列的方式结束)