首页 > 解决方案 > R - POST 的 JSON 结构

问题描述

我已经阅读了有关使用 toJSON() 创建 JSON 的所有内容,但它只是没有点击。任何指导将不胜感激。

我正在尝试为对 API 的 POST 请求创建 JSON。我正在尝试创建以下结构:

{
  "configuration": {
    "Id": 1,
    "OptionIds": [
            261,
            263,
            533122,
            228  
    ]
  },
  "length": 15000,
  "zip": "92691",
  "Date": "2019-09-11T15:46:31.354Z"
  }

试图逐个元素地分解它,我可以开始接近,但一旦尝试将所有东西结合起来,就永远无法得到最终的解决方案。

例如。

v_opt_ids <- list(OptionsIds = c(261,
                                 263,
                                 533122,
                                 228))

cat(jsonlite::toJSON(v_opt_ids, pretty=T))

产生:

{
  "OptionsIds": [261, 263, 533122, 228]
}

虽然这并不是我在该部分中的目标,但当与其他元素结合使用时。

config <- data.frame(
      vehicleId = c(444449),
      v_opt_ids)

cat(jsonlite::toJSON(list(configuration = config), pretty=T))

事情很快就出问题了。。

{
  "configuration": [
    {
      "vehicleId": 444449,
      "OptionsIds": 261
    },
    {
      "vehicleId": 444449,
      "OptionsIds": 263
    },
    {
      "vehicleId": 444449,
      "OptionsIds": 533122
    },
    {
      "vehicleId": 444449,
      "OptionsIds": 228
    }
  ]
}

任何指导将不胜感激。

标签: rjsonapipost

解决方案


使用嵌套lists:

L <- list(
  configuration = list(
    Id = 1,
    OptionIds = c(261, 263, 533122, 228)
  ),
  length = 15000,
  zip = "92691",
  Date = "2019-09-11T15:46:31.354Z"
)

jsonlite::toJSON(L, pretty = TRUE, auto_unbox = TRUE)
# {
#   "configuration": {
#     "Id": 1,
#     "OptionIds": [261, 263, 533122, 228]
#   },
#   "length": 15000,
#   "zip": "92691",
#   "Date": "2019-09-11T15:46:31.354Z"
# } 

( pretty=TRUEJSON 不需要,只是使用它来尝试匹配您的预期输出。auto_unbox=TRUE确保一个得到"Id":1而不是"Id":[1],这对于大多数使用 json 的东西来说在功能上是相同的,有些人认为它是一种更可取的格式。


推荐阅读