R 列表和数据框组合成一个json

R 列表和数据框组合成一个json,r,json,R,Json,我需要从R获得一个类似于此示例的JSON: { "content": [ { "id": "id_1", "classes": { "animal": "cat", "place": "house", "score": 75 } }, { "id": "id_2",

我需要从R获得一个类似于此示例的JSON:

{
  "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)