【问题标题】:Using a JSON array in a POST request [duplicate]在 POST 请求中使用 JSON 数组 [重复]
【发布时间】:2016-08-08 13:24:18
【问题描述】:

我正在编写一个 API wrapper 以使用 httr 包查询英国邮政编码,当我使用 GET 请求时一切正常。在使用POST 请求时,我有点迷茫。

API 的 documentation 是这样说的:

接受包含邮政编码数组的 JSON 对象。返回一个列表 匹配的邮政编码和相应的可用数据。

最多接受 100 个邮政编码。

发布https://api.postcodes.io/postcodes?q=[postcode]

发布数据

此方法需要一个包含邮政编码数组的 JSON 对象 被张贴。例如

{ "邮政编码" : ["PR3 0SG", "M45 6GN", "EX165BL"] }

我尝试了以下方法:

library(httr)

pc_json <- '{
  "postcodes" : ["PR3 0SG", "M45 6GN", "EX165BL"]
}'

r <- POST(paste0("https://api.postcodes.io/postcodes?q=", pc_json, encode = "json"))

但它会返回这个:

$状态1400

$error 1 "提交的JSON无效,需要提交一个JSON对象 带有一组邮政编码或地理定位对象"

当我修剪数组并使用它时也会发生同样的情况:

r <- POST("https://api.postcodes.io/postcodes?q=EX165BL")
content(r)

我读过类似的帖子herehere,但它们并没有让我的问题更容易解决。

有什么解决办法吗?

【问题讨论】:

  • 您和@marty_c 可能想在一个 pkg 上进行合作。但是为什么不编写一个同步 data 的 pkg,然后在本地进行所有处理而不是访问 API 服务器呢?从长远来看,它会更快、更高效。
  • 感谢您的联系。从长远来看,我的计划是在本地查询数据。包含整个数据的文件似乎非常大,因此将其包含在包中是不可能的。但可以单独下载。
  • 您还可以使用 httr 包中的 fromJSON() 函数将任何 JSON 数组放入将通过 r 的内容中。

标签: json r http post httr


【解决方案1】:

您几乎只需将邮政编码格式化为列表并使用POST 的正文参数,然后编码为json

library(httr)

pc_json <- list(
  postcodes = c("PR3 0SG", "M45 6GN", "EX165BL")
)
res <- POST("https://api.postcodes.io/postcodes"
            , body = pc_json
            , encode = "json")
appData <- content(res)

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 2017-11-24
    • 2017-09-18
    • 2018-08-09
    • 2016-05-19
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多