使用括号从 R 中的列表创建 Json

Create Json from list in R with brackets

我正在尝试创建一个 JSON 字符串来发送来自 API 的 POST 请求(CTUIT 对餐馆的招摇 API)。

# Load packages ----------------------------------------------
library(tidyverse)
library(httr)
library(jsonlite)

我在 R 中创建了一个嵌套列表,我想将其转换为 JSON 并使用 jsonlite::toJSON() 构建 JSON 字符串:

# Nested list
my_list <- 
  list(grouping = 2,
       locationID = 4,
       metricID = 1,
       startDate = '2021-10-31',
       endDate = '2021-10-31',
       filters = list(
                      id = 1, 
                      value = 6)
        ) 

# Convert the list to JSON
my_JSON <- jsonlite::toJSON(my_list, 
                            auto_unbox = TRUE, 
                            pretty = TRUE)


my_JSON

结果如下:

{
  "grouping": 2,
  "locationID": 4,
  "metricID": 1,
  "startDate": "2021-10-31",
  "endDate": "2021-10-31",
  "filters": {
    "id": 1,
    "value": 6
  }
} 

我需要弄清楚如何做的是在“filters”元素周围添加方括号 [] 以匹配 API 文档。根据 API 说明,这需要看起来像:

[
  {
    "grouping": 2,
    "locationID": 4,
    "metricID": 1,
    "startDate": "2021-10-31",
    "endDate": "2021-10-31",
    "filters": [
      {
        "id": 1,
        "value": [
          6
        ]
      }
    ]
   }
 ]

jsonlite 包可以实现吗?

我不确定方括号的术语,但我可以使用 paste0() 轻松地将它们添加到完整 JSON 字符串的任一侧。我想弄清楚如何获得 JSON 内部元素的方括号。特别是嵌套的“过滤器”元素。

谢谢

非常简单:

jsonlite::toJSON(
    list(
        c(
            list(
                "grouping" = 2,
                "locationID" = 4,
                "metricID" = 1,
                "startDate" = "2021-10-31",
                "endDate" = "2021-10-31",
                "filters" = list(
                    list(
                        "id" = 1,
                        "value" = list(6)
                    )
                 
                )
            )
        )
    ), 
    pretty = TRUE,
    auto_unbox = TRUE
)

这导致:

[
  {
    "grouping": 2,
    "locationID": 4,
    "metricID": 1,
    "startDate": "2021-10-31",
    "endDate": "2021-10-31",
    "filters": [
      {
        "id": 1,
        "value": [
          6
        ]
      }
    ]
  }
]