用R解析JSON


90

我对R相当陌生,但是使用得越多,我看到的就比SAS或SPSS强大得多。我看到的主要好处之一就是能够从Web上获取和分析数据。我想这是可能的(甚至可能很简单),但是我正在寻找解析Web上公开可用的JSON数据的方法。我决不是一名程序员,因此,您能提供的任何帮助和说明将不胜感激。即使您为我指出了一个基本的工作示例,我也可能会完成它。

Answers:


89

Omegahat的RJSONIO是另一个软件包,提供了以JSON格式读写数据的功能。

rjson不使用S4 / S3方法,因此不容易扩展,但仍然有用。不幸的是,它没有使用向量化操作,因此对于非平凡数据来说太慢了。类似地,对于将JSON数据读入R来说,它有些慢,因此不能扩展到大数据,这是一个问题。

更新(新软件包2013-12-03):

jsonlite:此软件包是该软件包的分支RJSONIO。它基于解析器构建,RJSONIO但在R对象和JSON字符串之间实现了不同的映射。此程序包中的C代码大部分来自RJSONIO程序包,R代码已从头开始重写。除了落在替代fromJSONtoJSON,所述封装具有功能序列化的对象。此外,该软件包还包含许多单元测试,以确保所有边缘情况都得到一致的编码和解码,以与系统和应用程序中的动态数据一起使用。


3
我发现对rjson,RJSONIO和jsonlite的这种比较很有帮助
Eric

2
上面的比较链接无效。是这个正确的链接?(不同之处是https)
woodvi 2015年

58

jsonlite包易于使用,并试图JSON转换成数据帧。

例:

library(jsonlite)

# url with some information about project in Andalussia
url <- 'http://www.juntadeandalucia.es/export/drupaljda/ayudas.json'

# read url and convert to data.frame
document <- fromJSON(txt=url)

1
这对于我所需要的来说非常易于使用。非常感谢
Unknown Coder

文档<-fromJSON(file = url); #但请求超时
EngrStudent'Febru''Feb 5'16

1
喜欢这个。似乎比rjson造成的混乱要好得多。
randominstanceOfLivingThing

1
除非原始的json格式已经变平,jsonlite否则它和叉子用来吃汤差不多有用。
gentil '17

19

这是缺少的例子

library(rjson)
url <- 'http://someurl/data.json'
document <- fromJSON(file=url, method='C')

2
这对我有用,但您不想像所示那样为文件变量名传递字符串。
mrjrdnthms

4

RJSONIO,rjson和jsonlite中的fromJSON()函数不会为复杂的嵌套json对象返回简单的2D data.frame。

为了克服这个问题,您可以使用tidyjson。它接受一个json并始终返回一个data.frame。它目前在CRAN中不可用,您可以在这里获得:https : //github.com/sailthru/tidyjson

更新: tidyjson现在在cran中可用,您可以使用直接安装install.packages("tidyjson")


2

根据记录,rjson和RJSONIO确实会更改文件类型,但是它们本身并没有真正解析。例如,我收到JSON格式的丑陋MongoDB数据,将其转换为rjson或RJSONIO,然后使用unlist和大量手动校正将其实际解析为可用矩阵。


1

在控制台中使用RJSONIO尝试以下代码

library(RJSONIO)
library(RCurl)


json_file = getURL("https://raw.githubusercontent.com/isrini/SI_IS607/master/books.json")

json_file2 = RJSONIO::fromJSON(json_file)

head(json_file2)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.