【问题标题】:Create Json from list in R with brackets用括号从R中的列表创建Json
【发布时间】:2021-12-31 05:17:03
【问题描述】:

我正在尝试创建一个 JSON 字符串,以从 API(CTUIT 的餐厅 swagger API)发送 POST 请求。

# 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
  }
} 

我需要弄清楚如何做是在“过滤器”元素周围添加方括号 [] 以匹配 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 内部元素的方括号。特别是嵌套的“过滤器”元素。

谢谢

【问题讨论】:

  • 使用列表列表。如果未命名,列表将使用[]进行编码,如果已命名,则列表将使用{}filters = list(list(id = 1, value = 6))
  • 感谢弗利克先生的解释!有道理。

标签: r json jsonlite


【解决方案1】:

非常简单:

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
        ]
      }
    ]
  }
] 

【讨论】:

  • 完美运行。谢谢罗曼!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多