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