所以简而言之,我几乎想不出如何从CSV文件生成一个巨大的嵌套列表,目标是以漂亮、整洁的json格式输出它.

然而,问题是我的json输出在json输出中 for each 子列表提供了一个"[]"作为数据数组,导致了太多的括号"[]",这在某种程度上扰乱了下一步的过程.

我已经读了一些关于这方面的东西,我只有几个括号的Pretty和Auto_Unbox遥控器.

jsonlite::toJSON(updated_nested_lists, pretty=TRUE,auto_unbox = TRUE)

所需的json应该如下所示

enter image description here

我的json现在看起来像这样

enter image description here

我认为这意味着我应该在某些级别解开我的嵌套列表以实现这一点.但我被困在如何将它们从里到外解压到特定的列表上,当我用unlist播放"Orders"子列表时,它有点像是把所有东西都打碎了,丢失了最里面的数据 struct .我想对完整的数据执行此操作(相同的 struct ,大得多)

此处提供的最低可重复性数据:

list(list(startTimestamp = structure(1620293100, class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), endTimestamp = structure(1620293998.66, class = 
c("POSIXct", 
"POSIXt"), tzone = "UTC"), orders = structure(list(structure(list(
    timestamp = structure(c(1620293100.88, 1620293100.88, 1620293100.88, 
    1620293100.88, 1620293100.88), tzone = "UTC", class = c("POSIXct", 
    "POSIXt")), tradePrice = c(22.63, 22.63, 22.63, 22.63, 22.63
    ), type = c("Mid", "Mid", "Mid", "Mid", "Mid"), volume = c(100L, 
    100L, 100L, 100L, 100L), tradeSum = c(2263, 2263, 2263, 2263, 
    2263)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-5L)), structure(list(timestamp = structure(1620293100.88, tzone = "UTC", class = 
c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Mid", volume = 300L, 
    tradeSum = 6789), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293100.88, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Mid", volume = 1000L, 
    tradeSum = 22630), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293100.88, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Mid", volume = 3600L, 
    tradeSum = 81468), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293444.68, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.64, type = "Bid", volume = 200L, 
    tradeSum = 4528), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293446.74, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.64, type = "Ask", volume = 2700L, 
    tradeSum = 61128), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293453.78, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Bid", volume = 600L, 
    tradeSum = 13578), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293455.55, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.64, type = "Ask", volume = 100L, 
    tradeSum = 2264), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293457.92, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.64, type = "Ask", volume = 200L, 
    tradeSum = 4528), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293468.28, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Bid", volume = 500L, 
    tradeSum = 11315), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293470.52, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Bid", volume = 300L, 
    tradeSum = 6789), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293482.13, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Bid", volume = 700L, 
    tradeSum = 15841), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293482.13, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Bid", volume = 900L, 
    tradeSum = 20367), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293487.69, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Ask", volume = 200L, 
    tradeSum = 4526), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293501.04, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Bid", volume = 100L, 
    tradeSum = 2262), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293506.57, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Ask", volume = 400L, 
    tradeSum = 9052), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293531.71, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Bid", volume = 200L, 
    tradeSum = 4524), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293578.02, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.61, type = "Bid", volume = 200L, 
    tradeSum = 4522), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293585.77, tzone 
= "UTC", class = c("POSIXct", 
 "POSIXt")), tradePrice = 22.61, type = "Bid", volume = 100L, 
    tradeSum = 2261), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293588.74, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.61, type = "Bid", volume = 100L, 
    tradeSum = 2261), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293589.1, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.61, type = "Bid", volume = 100L, 
    tradeSum = 2261), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293589.1, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.61, type = "Bid", volume = 300L, 
    tradeSum = 6783), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293608.04, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.6, type = "Bid", volume = 100L, tradeSum = 2260), class = 
c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -1L)), structure(list(
    timestamp = structure(1620293633.1, tzone = "UTC", class = c("POSIXct", 
    "POSIXt")), tradePrice = 22.6, type = "Bid", volume = 200L, 
    tradeSum = 4520), class = c("tbl_df", "tbl", "data.frame"
 ), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293639.58, 
tzone = "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.6, type = "Bid", volume = 200L, tradeSum = 4520), class = 
c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -1L)), structure(list(
    timestamp = structure(1620293642.91, tzone = "UTC", class = c("POSIXct", 
    "POSIXt")), tradePrice = 22.6, type = "Ask", volume = 100L, 
    tradeSum = 2260), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293642.91, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.6, type = "Ask", volume = 2900L, 
    tradeSum = 65540), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293654.03, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.6, type = "Ask", volume = 300L, tradeSum = 6780), class = 
c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -1L)), structure(list(
    timestamp = structure(1620293656.97, tzone = "UTC", class = c("POSIXct", 
    "POSIXt")), tradePrice = 22.62, type = "Ask", volume = 100L, 
    tradeSum = 2262), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293660, tzone = 
"UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Ask", volume = 700L, 
    tradeSum = 15834), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293663, tzone = 
"UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Ask", volume = 300L, 
    tradeSum = 6786), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293666.03, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Ask", volume = 200L, 
    tradeSum = 4524), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293672.01, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Ask", volume = 400L, 
    tradeSum = 9048), class = c("tbl_df", "tbl", "data.frame"
 ), row.names = c(NA, -1L)), structure(list(timestamp = structure(c(1620293674.65, 
 1620293674.65), tzone = "UTC", class = c("POSIXct", "POSIXt")), 
    tradePrice = c(22.62, 22.62), type = c("Ask", "Ask"), volume = c(200L, 
    200L), tradeSum = c(4524, 4524)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -2L)), structure(list(timestamp = 
 structure(1620293674.65, tzone = "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Ask", volume = 3600L, 
    tradeSum = 81432), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293677.64, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Ask", volume = 100L, 
    tradeSum = 2263), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293677.67, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Ask", volume = 2200L, 
    tradeSum = 49786), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293677.92, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Ask", volume = 800L, 
    tradeSum = 18104), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293686.34, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.6, type = "Bid", volume = 200L, tradeSum = 4520), class = 
c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -1L)), structure(list(
    timestamp = structure(1620293698.61, tzone = "UTC", class = c("POSIXct", 
    "POSIXt")), tradePrice = 22.62, type = "Bid", volume = 100L, 
    tradeSum = 2262), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293707.6, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Bid", volume = 400L, 
    tradeSum = 9048), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293723.01, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Bid", volume = 400L, 
    tradeSum = 9052), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293723.26, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Ask", volume = 300L, 
    tradeSum = 6789), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293723.29, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Ask", volume = 100L, 
    tradeSum = 2262), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293723.29, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Bid", volume = 100L, 
    tradeSum = 2262), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293723.29, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Ask", volume = 300L, 
    tradeSum = 6789), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293734.89, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Bid", volume = 200L, 
    tradeSum = 4524), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293743.34, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Bid", volume = 800L, 
    tradeSum = 18096), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293743.52, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.62, type = "Ask", volume = 1900L, 
    tradeSum = 42978), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(c(1620293743.95, 
1620293743.95), tzone = "UTC", class = c("POSIXct", "POSIXt")), 
    tradePrice = c(22.62, 22.62), type = c("Ask", "Ask"), volume = c(1000L, 
    1000L), tradeSum = c(22620, 22620)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -2L)), structure(list(
    timestamp = structure(c(1620293771.07, 1620293771.07), tzone = "UTC", class = 
c("POSIXct", 
    "POSIXt")), tradePrice = c(22.61, 22.61), type = c("Bid", 
    "Bid"), volume = c(1400L, 1400L), tradeSum = c(31654, 31654
    )), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-2L)), structure(list(timestamp = structure(1620293771.07, tzone = "UTC", class = 
c("POSIXct", 
 "POSIXt")), tradePrice = 22.62, type = "Bid", volume = 400L, 
    tradeSum = 9048), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293772.39, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.61, type = "Ask", volume = 700L, 
    tradeSum = 15827), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293772.42, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.61, type = "Ask", volume = 900L, 
    tradeSum = 20349), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(c(1620293772.78, 
1620293772.78), tzone = "UTC", class = c("POSIXct", "POSIXt")), 
     tradePrice = c(22.61, 22.61), type = c("Ask", "Ask"), volume = c(100L, 
    100L), tradeSum = c(2261, 2261)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -2L)), structure(list(timestamp = 
structure(c(1620293780.41, 
1620293780.41), tzone = "UTC", class = c("POSIXct", "POSIXt")), 
    tradePrice = c(22.62, 22.62), type = c("Ask", "Ask"), volume = c(500L, 
    500L), tradeSum = c(11310, 11310)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -2L)), structure(list(timestamp = 
structure(1620293815.65, tzone = "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.64, type = "Ask", volume = 100L, 
    tradeSum = 2264), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293845.36, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.63, type = "Bid", volume = 100L, 
    tradeSum = 2263), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293845.36, tzone 
= "UTC", class = c("POSIXct", 
 "POSIXt")), tradePrice = 22.63, type = "Bid", volume = 700L, 
    tradeSum = 15841), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293892.3, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.73, type = "Bid", volume = 100L, 
    tradeSum = 2273), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L)), structure(list(timestamp = structure(1620293998.66, tzone 
= "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = 22.66, type = "Bid", volume = 300L, 
    tradeSum = 6798), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L))), ptype = structure(list(timestamp = structure(numeric(0), 
tzone = "UTC", class = c("POSIXct", 
"POSIXt")), tradePrice = numeric(0), type = character(0), volume = integer(0), 
    tradeSum = numeric(0)), class = c("tbl_df", "tbl", "data.frame"
), row.names = integer(0)), class = c("vctrs_list_of", "vctrs_vctr", 
"list"))))

推荐答案

你的列表确实嵌套得太深了,试试recursive= unlist吧.rapply在这里可能会有帮助.

> unlist(rapply(updated_nested_lists, unlist, how='l', recursive=FALSE), recursive=FALSE) |>
+   jsonlite::toJSON(pretty=TRUE, auto_unbox=TRUE)
{
  "startTimestamp": "2021-05-06 09:25:00",
  "endTimestamp": "2021-05-06 09:39:58",
  "orders": [
    {
      "timestamp": ["2021-05-06 09:25:00", "2021-05-06 09:25:00", "2021-05-06 09:25:00", "2021-05-06 09:25:00", "2021-05-06 09:25:00"],
      "tradePrice": [22.63, 22.63, 22.63, 22.63, 22.63],
      "type": ["Mid", "Mid", "Mid", "Mid", "Mid"],
      "volume": [100, 100, 100, 100, 100],
      "tradeSum": [2263, 2263, 2263, 2263, 2263]
    },
    {
      "timestamp": "2021-05-06 09:25:00",
      "tradePrice": 22.63,
      "type": "Mid",
      "volume": 300,
      "tradeSum": 6789
    },
    ...

如果可能,请查看数据生成代码,看看是否可以避免这种嵌套,而不是使用此修复.

请注意,您可以很容易地判断str struct

> str(updated_nested_lists)
List of 1
 $ :List of 3
  ..$ startTimestamp: POSIXct[1:1], format: "2021-05-06 09:25:00"
  ..$ endTimestamp  : POSIXct[1:1], format: "2021-05-06 09:39:58"
  ..$ orders        :List of 61
  .. ..$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 5 obs. of  5 variables:
  .. .. ..$ timestamp : POSIXct[1:5], format: "2021-05-06 09:25:00" "2021-05-06 09:25:00" "2021-05-06 09:25:00" ...
  .. .. ..$ tradePrice: num [1:5] 22.6 22.6 22.6 22.6 22.6
  .. .. ..$ type      : chr [1:5] "Mid" "Mid" "Mid" "Mid" ...
  .. .. ..$ volume    : int [1:5] 100 100 100 100 100
  .. .. ..$ tradeSum  : num [1:5] 2263 2263 2263 2263 2263
  .. ..$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 1 obs. of  5 variables:
  .. .. ..$ timestamp : POSIXct[1:1], format: "2021-05-06 09:25:00"
  .. .. ..$ tradePrice: num 22.6

R相关问答推荐

为什么stat_bin在R中的ggplot中显示错误的数字?

给定R中另一行中的值,如何插补缺失值

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

在值和NA的行顺序中寻找中断模式

如何在emmeans中计算连续变量的对比度

移除仪表板Quarto中顶盖和车身之间的白色区域

将文件保存到新文件夹时,切换r设置以不必创建目录

在嵌套列表中查找元素路径的最佳方法

我正在努力用R计算数据集中的中值逐步距离

绘制采样开始和采样结束之间的事件

如何在R库GoogleDrive中完全删除预先授权的Google帐户?

跨列查找多个时间报告

汇总数据的Sheffe检验的P值(平均值和标准差)

从多个可选列中选取一个值到一个新列中

R中的类别比较

将数据集旋转到长格式,用于遵循特定名称模式的所有变量对

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

从线的交点创建面

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

禁用时,SelecizeInput将变得不透明