2010-01-14 102 views
74

我是相当新的R,但更多的使用它,我看到它确实是多么强大了SAS或SPSS就越多。正如我所看到的,主要的好处之一就是能够从网络获取和分析数据。我想这是可能的(甚至可能是直截了当的),但我正在寻求解析Web上公开提供的JSON数据。我不是任何程序员,所以任何帮助和指导,你可以提供将不胜感激。即使你把我指向一个基本的工作例子,我也可以完成它。解析JSON有R

回答

78

RJSONIO从Omegahat是另一封装,其提供了用于在JSON格式读取和写入数据。

rjson不使用S4/S3方法等不容易扩展的,但仍然是有用的。不幸的是,它没有使用矢量化操作,所以对于非平凡的数据太慢了。同样,为了将JSON数据读入R,它有点慢,所以不能扩展到大数据,如果这是个问题。

更新(新包装2013年12月3日):

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

+3

我rjson,RJSONIO的实测值[该比较](http://rstudio-pubs-static.s3.amazonaws.com/31702_9c22e3d1a0c44968a4a1f9656f1800ab.html),和jsonlite有用 – Eric 2015-01-27 16:36:38

+1

上述比较链路是死的。 IS [这](https://rstudio-pubs-static.s3.amazonaws.com/31702_9c22e3d1a0c44968a4a1f9656f1800ab.html)正确的链接?(区别是https) – woodvi 2015-06-09 22:57:24

19

这里是缺少例如

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

这对我有效,但你不想为文件变量名传递一个字符串,如图所示。 – mrjrdnthms 2013-08-06 20:01:54

2

为了记录在案,rjson和RJSONIO不要更改文件类型,但他们并不真正解析本身。例如,我收到JSON格式的丑陋MongoDB数据,将其转换为rjson或RJSONIO,然后使用unlist和大量手动更正将其解析为可用矩阵。

42

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

这非常容易使用我需要的东西。非常感谢你 – 2015-02-04 02:33:32

+0

文件< - fromJSON(file = url); #但请求超时 – EngrStudent 2016-02-05 19:04:51

+1

喜欢这个。似乎比rjson创造的混乱更好。 – randominstanceOfLivingThing 2016-03-05 23:05:43

3

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

为了克服这一点,你可以使用tidyjson。它需要一个JSON并且总是返回一个data.frame。目前还不能在CRAN availble的,你可以在这里:https://github.com/sailthru/tidyjson

更新: tidyjson现已在CRAN可用,则可以直接使用install.packages("tidyjson")

0

安装尝试以下控制台

使用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)