如何使用 jsonlite 包从 R 数据帧生成自定义 json

How to generate a custom json from R dataframe using jsonlite package

我在jsonlite的github主页上有post这个问题,目前没有回复,https://github.com/jeroen/jsonlite/issues/390

其他包可以获取结果吗?

MWE:

library(jsonlite)
ifsxls <- structure(list(full = c("NATURE REVIEWS DRUG DISCOVERY", "LANCET"
), ab = c("NAT REV DRUG DISCOV", "LANCET"), ifc = c("84.694", 
                                                    "79.321"), if5 = c("80.543", "77.237")), row.names = c(NA, -2L
                                                    ), class = c("tbl_df", "tbl", "data.frame"))
toJSON(ifsxls, pretty=TRUE)

现在:

[
  {
    "full": "NATURE REVIEWS DRUG DISCOVERY",
    "ab": "NAT REV DRUG DISCOV",
    "ifc": "84.694",
    "if5": "80.543"
  },
  {
    "full": "LANCET",
    "ab": "LANCET",
    "ifc": "79.321",
    "if5": "77.237"
  }
] 

预计:

{ 
  "NATURE REVIEWS DRUG DISCOVERY" : ["NAT REV DRUG DISCOV", "84.694", "80.543"],
  "LANCET" : ["LANCET", "79.321", "77.237"]
}

非常感谢。

这是一个非常不寻常的期望输出,但您可以将 data.frame 转换为更符合您期望的 JSON 形状的形状。例如,使用基本 R 函数,您可以执行

ifsxls |>
  split(~full) |> 
  lapply(function(x) unlist(subset(x, select=-full))) |> 
  jsonlite::toJSON(pretty=TRUE)

# {
#  "LANCET":["LANCET","79.321","77.237"],
#  "NATURE REVIEWS DRUG DISCOVERY":["NAT REV DRUG DISCOV","84.694","80.543"]
# }