2017-10-10 24 views
1

我試圖使用jsonlite包將以下JSON數據庫讀入R中。從互聯網讀取一個json文件到R - 遇到</html>行

library(jsonlite) 
db <- fromJSON("http://www.stbates.org/funguild_db.php", flatten=TRUE) 

這樣做,這將引發以下錯誤:

Error in parse_con(txt, bigint_as_char) : 
    lexical error: invalid char in json text. 
             <html> <head> <title>funguild_d 
        (right here) ------^ 

顯然它不喜歡這些字符。我在這裏有一個簡單的工作,我失蹤了嗎?

+2

這根本就不是一個合適的JSON文件。這是一個恰好包含看起來像JSON的數據的HTML文件。我不知道爲什麼有人可能以這種方式服務數據,這似乎是一個錯誤。 – MrFlick

+0

@MrFlick哇。好吧,這現在變得更有意義了。生物學家建立自定義數據庫,這有時會發生.... – colin

回答

2

@MrFlick是正確的,它不是一個好的方式來提供數據。但是,一如既往,有辦法。在這裏,我使用rvest來刮掉整個頁面,然後gsub來擺脫第一個字符串,這恰好是url的最後部分(減去.php擴展名)。

url <- "http://www.stbates.org/funguild_db.php" 

library(rvest) 
library(jsonlite) 

js <- url %>% 
    read_html() %>% 
    html_text() 

js <- jsonlite::fromJSON(gsub("funguild_db", "", js)) 

head(js[, 1:5]) 

#      $oid     taxon taxonomicLevel trophicMode   guild 
# 1 58f450f1791497fd28ebfccc Xanthomonas campestris    20 Pathotroph Plant Pathogen 
# 2 58f450f1791497fd28ebfccd Xanthomonas juglandis    20 Pathotroph Plant Pathogen 
# 3 58f450f1791497fd28ebfcce   Xanthoparmelia    13 Symbiotroph  Lichenized 
# 4 58f450f1791497fd28ebfccf   Xanthopeltis    13 Symbiotroph  Lichenized 
# 5 58f450f1791497fd28ebfcd0   Xanthopsora    13 Symbiotroph  Lichenized 
# 6 58f450f1791497fd28ebfcd1   Xanthopsorella    13 Symbiotroph  Lichenized