R 列表和数据框组合成一个json
我需要从R获得一个类似于此示例的JSON:R 列表和数据框组合成一个json,r,json,R,Json,我需要从R获得一个类似于此示例的JSON: { "content": [ { "id": "id_1", "classes": { "animal": "cat", "place": "house", "score": 75 } }, { "id": "id_2",
{
"content": [
{
"id": "id_1",
"classes": {
"animal": "cat",
"place": "house",
"score": 75
}
},
{
"id": "id_2",
"classes": {
"animal": "dog",
"place": "house",
"score": 81
}
},
{
"id": "id_3",
"classes": {
"animal": "duck",
"place": "garden",
"score": 63
}
}
],
"book":{
"pageNumber": 1,
"animalsCount": 23,
"reference": "BH"
}
}
我正在R中执行以下操作:
library(jsonlite)
df <- data.frame(id = c("id_1", "id_2", "id_3"), animal = c("cat", "dog", "duck"),
place = c("house", "house", "house"), score=c(75, 81, 63))
pagenum <- 1
ref <- "BH"
getJSON <- function(dfinfo, pag, ref_name){
classes <- data.frame(animal = dfinfo$animal)
classes$place <- dfinfo$place
classes$score <- dfinfo$score
df1 <- data.frame(id = dfinfo$id)
df1$classes <- classes
df2 <- data.frame(pageNumber = pagenum)
df2$animalsCount <- nrow(df)
df2$reference <- ref
info_to_json <- list(content = classes, book = df2)
info_to_json <- toJSON(info_to_json, pretty=TRUE)
return(info_to_json)
}
getJSON(df, pagenum, ref)
我理解这一点是因为info_to_json
是一个列表,但我需要它不带[],如上所示,但我不知道如何实现它,如何组合这两个数据帧以获得json中的列表数据帧
我尝试过,没有使用toJSON()
函数将列表info\u转换为json
转换为json,而是在我的函数getJSON()
顶部添加以下行:
但是,如果book只是一个参数(比如“book”=3),那么这个函数将取消绑定“book”,但如果它像我一样是一个数据帧,则不会取消绑定
我怎样才能做到这一点
还有,有没有更好的方法将数据帧转换为JSON而不必手动指定每个参数?或者这是使用R的唯一方法?使用列表而不是数据帧,并设置选项
auto\u unbox=TRUE
:
df2 <- list(
pageNumber = pagenum,
animalsCount = nrow(df),
reference = ref_name
)
info_to_json <- list(content = classes, book = df2)
info_to_json <- toJSON(info_to_json, pretty=TRUE, auto_unbox = TRUE)
df2有几个问题:
您可以为图书创建data.frame,但需要的是一个平面列表
内容部分应转换为嵌套结构
我解决这两个问题的办法是:
图书馆(tidyverse)
getJSON%
do(id=.$id,
类别=[2:4])
关于你的最后一个问题,你可以做课程,谢谢!它在我正在处理的实际案例中也非常有效。同样感谢“嵌套结构”技巧,我也将实现它。看起来好多了!谢谢是的,带有auto_unbox参数的列表起到了作用。
#'@serializer unboxed JSON
df2 <- list(
pageNumber = pagenum,
animalsCount = nrow(df),
reference = ref_name
)
info_to_json <- list(content = classes, book = df2)
info_to_json <- toJSON(info_to_json, pretty=TRUE, auto_unbox = TRUE)