如何使用管道工R发送json响应

时间:2017-03-04 06:04:08

标签: json r jsonlite plumber

我需要使用以下格式的管道工包发送来自R的回复

{
  "status": "SUCCESS",
  "code": "200",
  "output": {
    "studentid": "1001",
    "name": "Kevin"
  }
}

但我的格式低于格式

[
  "{\n  \"status\": \"SUCCESS\",\n  \"code\": \"200\",\n  \"output\": {\n    \"studentid\": \"1001\",\n    \"name\": \"Kevin\"\n  }\n}"
]

请帮我正确格式化这个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)
}

2 个答案:

答案 0 :(得分:4)

我在管道工的开发版本中添加了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"))

}

仅供参考,如果你想强迫管道工返回你直接提供的文本,你应该能够在res上设置$body元素,然后从res对象返回功能。

#* @get /
function(res){
  res$body <- "I am raw"
  res
}

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

答案 1 :(得分:0)

只需删除toJSON()包装器即可。 水管工已经进行了JSON序列化,因此您通过添加toJSON函数来完成两次。

这应该有用。

 addTwo <- function(){
  x <- list(status = "SUCCESS", code = "200",output = list(studentid = "1001", name = "Kevin"))
  return (x)
}