[英]Manipulation of JSON string in R before conversion to data.frame
我有一个URL,它会定期用一些JSON数据更新,我想使用以下代码将其转换为R中的数据表
library(jsonlite)
fromJSON("http://...")
但是,这不起作用,我认为这是由于JSON的结构方式所致。 据我了解,该文件的当前结构如下。
{"h1":[{"h2":[{"Name":"Column1Header","Value":"Row1Column1Value"},{"Name":"Column2Header","Value":"Row1Column2Value"}]},{"h2":[{"Name":"Column1Header","Value":"Row2Column1Value"},{"Name":"Column2Header","Value":"Row2Column2Value"}]}]}
我想如果我可以将url作为一个长字符串读取并将其操纵为类似于下面的内容,然后调用该函数
fromJSON()
我将能够获取所需的data.table。
[{"Column1Header":"Row1Column1Value","Column2Header":"Row1Column2Value"},{"Column1Header":"Row2Column1Value","Column2Header":"Row2Column2Value"}]
知道我该如何实现吗? 我试图解决此问题的方法包括使用readLines()
函数和使用gsub()
替换我不需要的位。 但是, readLines
在所有遇到麻烦的数据中放置了“ \\”,即使我过去了,我的gsub
方法也不是很可靠。
由于现在正在读取文件,因此任何帮助将不胜感激,因为它不能让我进入提取构建“ data.table
”所需的“名称,值”对所需的详细data.table
。
ps某件事告诉我,由于某些原因,原始JSON文件已转置,因为列名不一定符合导出系统命名约定。
您需要查看这篇帖子,其中有29个赞:
您的JSON在结构上有效。 因此,问题在于当它现在具有非矩形形状时,将其不列出保存在矩形中。
如果可以,请从上方将JSON剪切并粘贴到此处的验证器: JSON Viewer
...您会看到H1涵盖了许多帧,H2涵盖了几帧,并且它们都是嵌套的。
为了在数据框中使用此功能,您需要取消嵌套(取消列出键:值对的列表),并将每层数据分配给一列。
上面的帖子有一个坚如磐石的方法,可以使用RJSONIO
包快速,轻松地完成RJSONIO
还有一个与unlist
结合使用的apply方法。 您应该可以对此进行调整以解开数据!
就像是:
library(jsonlite)
library(purrr)
x <- '{"h1":[{"h2":[{"Name":"Column1Header","Value":"Row1Column1Value"},{"Name":"Column2Header","Value":"Row1Column2Value"}]},{"h2":[{"Name":"Column1Header","Value":"Row2Column1Value"},{"Name":"Column2Header","Value":"Row2Column2Value"}]}]}'
res <- fromJSON(x, simplifyVector=FALSE)
map(res$h1, "h2") %>%
map(unlist) %>%
map_df(function(x) {
y <- names(x)
nam <- which(grepl("Name", y))
val <- which(!grepl("Name", y))
setNames(as.list(x[val]), x[nam])
})
## # A tibble: 2 × 2
## Column1Header Column2Header
## <chr> <chr>
## 1 Row1Column1Value Row1Column2Value
## 2 Row2Column1Value Row2Column2Value
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.