httr GET操作无法访问JSON响应

时间:2015-11-09 20:09:48

标签: json r httr

我正在尝试从我的R脚本中的API调用访问JSON响应。 API调用是成功的,我可以在控制台中查看JSON响应。但是,我无法从中访问任何数据。

示例代码段是:

require(httr)

    target <- '#trump'
    sentence<- 'Donald trump has a wonderful toupe, it really is quite stunning that a man can be so refined and elegant'
    query <- url_encode(sentence)
    target <- gsub('#', '', target)
    endpoint <- "https://alchemy.p.mashape.com/text/TextGetTargetedSentiment?outputMode=json&target="
    apiCall <- paste(endpoint, target, '&text=', query, sep = '')

    resp <-GET(apiCall, add_headers("X-Mashape-Key" = sentimentKey, "Accept" = "application/json"))

    stop_for_status(resp)
    headers(resp)
    str(content(resp))
    content(resp, "text")

我按照CRAN(here)的httr快速入门指南以及this stack中的示例进行了操作。

不幸的是,我不断在内容()中获得“未使用的参数'文本”或“内容()没有定义存在接受一类'响应”。有没有人有任何建议?PS将打印标题,并且resp $ content将打印原始比特流

1 个答案:

答案 0 :(得分:2)

扩展评论,您需要在调用content(...)时明确设置内容类型。由于您的代码不可重复,以下是使用人口普查局的地理编码器(返回json响应)的示例。

library(httr)
url <- "http://geocoding.geo.census.gov/geocoder/locations/onelineaddress"
resp <-GET(url, query=list(address="1600 Pennsylvania Avenue, Washington DC",
                           benchmark=9,
                           format="json"))

json <- content(resp, type="application/json")
json$result$addressMatches[[1]]$coordinates
# $x
# [1] -77.038025
# 
# $y
# [1] 38.898735

假设您实际上正在获得json响应,并且结构良好,只需使用content(resp, type="application/json")即可。