2010-01-14 101 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)