首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用RCurl postForm收集JSON数据

使用RCurl postForm收集JSON数据
EN

Stack Overflow用户
提问于 2014-08-18 15:32:28
回答 2查看 1.9K关注 0票数 2

我正在尝试使用BLS APIRCurl中提取时间序列数据。

BLS为命令行提取提供了以下示例代码:

代码语言:javascript
运行
复制
curl -i -X POST -H 'Content-Type: application/json' 
     -d '{"seriesid":["LEU0254555900", "APU0000701111"],
        "startyear":"2002", "endyear":"2012"}' 
        http://api.bls.gov/publicAPI/v1/timeseries/data/ 

我还确认指定的文件(即系列ids)都存在,因为以下两种文件都会产生一个JSON格式的对象:

代码语言:javascript
运行
复制
require(RCurl)
bls.content_test1 <- getURLContent("http://api.bls.gov/publicAPI/v1/timeseries/data/LEU0254555900")
bls.content_test2 <- getURLContent("http://api.bls.gov/publicAPI/v1/timeseries/data/APU0000701111")

基于带有RCurl标记的各种帖子(特别是这个帖子 ),我将命令行脚本移植到以下代码块:

代码语言:javascript
运行
复制
require(RJSONIO)

jsonbody <- toJSON(list("seriesid"=paste('"["CFU0000008000"', '[LEU0254555900"]"')
                        ,"startyear"="2012"
                        ,"endyear"="2013"))

httpheader <- c(Accept="application/json; charset=UTF-8",
                "Content-Type"="application/json")

bls.content <- postForm("http://api.bls.gov/publicAPI/v1/timeseries/data/"
                        ,.opts=list(httpheader=httpheader
                                    ,postfields=jsonbody))

产生的结果:

代码语言:javascript
运行
复制
[1] "{\"status\":\"REQUEST_FAILED\",\"responseTime\":0,\"message\":[\"Your request has failed, please check your input parameters and try your request again.\"],\"Results\":null}"
attr(,"Content-Type")
                              charset 
"application/json"            "UTF-8"

这似乎是我的RCurl实现的一个问题,还是这似乎是一个问题的BLS API?

EN

Stack Overflow用户

回答已采纳

发布于 2014-08-18 15:40:44

实际上,这与您创建json主体的方式存在问题。如果你用你的版本--如果你做cat(jsonbody) --你会得到

代码语言:javascript
运行
复制
{
 "seriesid": "\"[\"CFU0000008000\" [LEU0254555900\"]\"",
"startyear": "2012",
"endyear": "2013"
}

里面有多余的逃脱器和托架。这不对。相反,试着

代码语言:javascript
运行
复制
jsonbody <- toJSON(list("seriesid"=c("CFU0000008000", "LEU0254555900"),
                        startyear="2012",
                        endyear="2013"))

这给

代码语言:javascript
运行
复制
{
 "seriesid": [ "CFU0000008000", "LEU0254555900" ],
"startyear": "2012",
"endyear": "2013" 
}

这是有效的JSON。只需更改该部分并按照您的要求使用其余的代码,就会给我一条REQUEST_SUCCEEDED消息。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25366947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档