R: Обработка ответа об ошибке в формате JSON

Я запрашиваю данные пользователя для API Graph Facebook, такие как

require(RJSONIO)
response <- RJSONIO::fromJSON("http://graph.facebook.com/?ids=Jack")
print(response)
# $Jack
# id       first_name           gender        last_name           locale 
# "534213341"           "Jack"           "male"      "Lindamood"          "en_US" 
# name         username 
# "Jack Lindamood"   

Все хорошо.

Но иногда я получаю ошибку от API для обработки. Например, этот ответ об ошибке (надеюсь, никто не примет это имя пользователя...)

{
   "error": {
      "message": "(#803) Some of the aliases you requested do not exist: this.username.does.not.exist.because.i.made.it.up",
      "type": "OAuthException",
      "code": 803
   }
}

Если я попытаюсь разобрать его с RJSONIO

RJSONIO::fromJSON("http://graph.facebook.com /?ids=this.username.does.not.exist.because.i.made.it.up")

я получил

Error in file(con, "r") : cannot open the connection

Но тогда, если я сначала разберу json с RCurl Я получаю сообщение об ошибке в формате rjson

require(RCurl)
json <- getURL("http://graph.facebook.com/?ids=this.username.does.not.exist.because.i.made.it.up")
RJSONIO::fromJSON(json)
$error
$error$message
[1] "(#803) Some of the aliases you requested do not exist: this.username.does.not.exist.because.i.made.it.up"

$error$type
[1] "OAuthException"

$error$code
[1] 803

Можно управлять ошибкой непосредственно с RJSONIO?

1 ответ

Ты можешь сделать

result <- try(RJSONIO::fromJSON("http://graph.facebook.com/?ids=this.username.does.not.exist.because.i.made.it.up"), 
              silent=TRUE)`

и проверить class(result) до обработки (будет try-error если вы получили сообщение об ошибке).

Вы также можете использовать httr пакет (который напрямую использует современный форк RSJSONIO пакет - jsonlite) против RJSONIO пакет:

library(httr)

content(GET("http://graph.facebook.com/?ids=Jack"), as="parsed")
content(GET("http://graph.facebook.com/?ids=this.username.does.not.exist.because.i.made.it.up"),
        as="parsed")
## $error
## $error$message
## [1] "(#803) Some of the aliases you requested do not exist: this.username.does.not.exist.because.i.made.it.up"
## 
## $error$type
## [1] "OAuthException"
## 
## $error$code
## [1] 803
Другие вопросы по тегам