当前位置: 首页 > 面试题库 >

如何以不太冗长的方式发布JSON格式的请求以从R中的URL获取JSON数据到data.frame中?

胡意致
2023-03-14
问题内容

我已经在R中编写了以下代码以开始使用数据请求API。这是一个普通的Web服务JSON API。

library(RJSONIO)
library(RCurl)
library(httr)

r <- POST("http://api.scb.se/OV0104/v1/doris/sv/ssd/START/PR/PR0101/PR0101A/KPIFastM2", 
          body = '{ "query": [], "response": { "format": "json" } }')
stop_for_status(r)
a<-content(r, "text", "application/json", encoding="UTF-8")
cat(a, file = "test.json")
x<-fromJSON(file("test.json", "r"))
mydf<-do.call(rbind, lapply(x$data, data.frame))
colnames(mydf)<-c("YearMonth", "CPI")

基本上,它使用httr初始化了URL的获取请求,然后通过fromJSON将生成的JSON数据转换为R结构。JSON请求如下所示:

{ "query": [], "response": { "format": "json" } }

确实,我的代码像我希望的那样将数据放入了data.frame中,但是它非常冗长,我拒绝相信所有这些行对于实现所需结果都是必需的。所需的结果是mydf
data.frame。

因此,我的问题是:将数据从Web服务获取到data.frame的最短,最正确的方法是什么?

干杯,迈克尔


问题答案:

有两个问题。一种是您没有使用jsonlite :-)另一种是您的JSON源似乎为blob加上了使JSON无效的U+FEFF Byte order
Mark
字符。RFC7159说:

实现不得在JSON文本的开头添加字节顺序标记。为了互操作性,解析JSON文本的实现可以忽略字节顺序标记的存在,而不是将其视为错误。

因此scb.se无法正确格式化其JSON。无论哪种方式,请尝试以下操作:

library(jsonlite)
library(httr)

req <- POST("http://api.scb.se/OV0104/v1/doris/sv/ssd/START/PR/PR0101/PR0101A/KPIFastM2", 
  body = '{ "query": [], "response": { "format": "json" } }')
stop_for_status(req)
json <- content(req, "text")


# JSON starts with an invalid character:
validate(json)
json <- substring(json, 2)
validate(json)

# Now we can parse
object <- jsonlite::fromJSON(json)
print(objects)


 类似资料:
  • 问题内容: 我有这个JSON字符串。我想将其发布到服务器(即使用POST方法)。如何在Android中完成? JSON字串: 如何形成此JSON数组并将其发布到服务器? 问题答案: 我自己做的。 这就是我们如何将JSON数据发送到服务器。

  • 问题内容: data = { ‘ids’: [12, 3, 4, 5, 6 , …] } urllib2.urlopen("http://abc.com/api/posts/create”,urllib.urlencode(data)) 我想发送POST请求,但是其中一个字段应该是数字列表。我怎样才能做到这一点 ?(JSON?) 问题答案: 如果您的服务器期望POST请求为json,则您需要添加标

  • 所以我有一个php页面,我试图让我的GoLang客户端通过POST请求进行通信。php脚本通过key:value进行输入,key:value是message:hello world,希望添加多个键。它适用于我的python脚本,但不适用于golang,所以这里是我到目前为止在golang中的内容。 尝试运行上述代码时收到的错误消息: php脚本是: 我能得到的最佳回复如下:

  • 如何使用方法将数据检索到数据库中,我创建了一个从外部服务api检索数据的方法-可以显示该方法,但我在创建将检索到的数据发送到数据库的适当方法时遇到了问题。 方法从外部api检索数据: 我准备了一个存储库和一个实体来创建一个数据库(创建了数据库,但没有填充数据) 我目前创建了一个POST方法,但它不允许检索和保存数据(逻辑不好?)。 DTO型号: 允许您保存数据的服务。 因此,我有一个问题,就是如何

  • 问题内容: 我有JSON值列表(实际上是一个文本文件,其中每一行都是一个JSON对象)。像这样: 某些值可能会丢失(例如,第一项没有“工作”值,第二项没有“教育”和“年龄”)。 我需要在R中创建数据框,并将所有缺少的列值填充为NA(如果至少一行中存在唯一名称的字段)。如何轻松实现呢? 我已经完成的工作-我安装了“ rjson”包,并将这些行解析为R列表。假设lines变量是line的字符向量。 “

  • 我需要在get请求中以JSON格式获取数据,数据应为以下格式: 但数据以以下形式返回,响应为字符串: 代码: 如何使用Rest Assured在get请求中获取JSON格式?