如何使用水管工R发送JSON响应

Raj*_*mar 2 json r jsonlite plumber

我需要使用以下格式的水暖工包从R发送响应

{
  "status": "SUCCESS",
  "code": "200",
  "output": {
    "studentid": "1001",
    "name": "Kevin"
  }
}
Run Code Online (Sandbox Code Playgroud)

但我得到以下格式

[
  "{\n  \"status\": \"SUCCESS\",\n  \"code\": \"200\",\n  \"output\": {\n    \"studentid\": \"1001\",\n    \"name\": \"Kevin\"\n  }\n}"
]
Run Code Online (Sandbox Code Playgroud)

请帮助我正确格式化此json

我的密码

#* @post /sum
addTwo <- function(){
  library(jsonlite)
  x <- list(status = "SUCCESS", code = "200",output = list(studentid = "1001", name = "Kevin"))
  output<-toJSON(x,pretty = TRUE, auto_unbox = TRUE)
  return (output)
}
Run Code Online (Sandbox Code Playgroud)

Jef*_*len 6

unboxedJSON在水暖工的开发版本中添加了序列化器。根据将来何时读取该序列化程序,该序列化程序可能已发布到CRAN,甚至现在可能是默认的序列化程序(我仍在辩论)。

但是现在,您可以从GitHub(devtools::install_github("trestletech/plumber"))安装开发版本,然后将@serializer unboxedJSON注释添加到函数中,如下所示:

#* @post /sum
#* @serializer unboxedJSON
addTwo <- function(){
  list(status = "SUCCESS", code = "200",output = list(studentid = "1001", name = "Kevin"))

}
Run Code Online (Sandbox Code Playgroud)

仅供参考,如果您确实要强制水管工直接返回您提供的某些文本,则应该能够将$body元素设置为res,然后res从函数中返回对象。

#* @get /
function(res){
  res$body <- "I am raw"
  res
}
Run Code Online (Sandbox Code Playgroud)

它将I am raw在响应中返回未格式化,未序列化的文本。