R Plumber JSON序列化器auto_unbox [英] R plumber JSON serializer auto_unbox

查看:105
本文介绍了R Plumber JSON序列化器auto_unbox的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

按照页面上的示例 http://plumber.trestletech.com/

我将myfile.R写为

I wrote myfile.R as

#* @post /test
test <- function(){
list(speech='aa',source='bb',displayText='cc')
}

然后我在上面运行了管道工代码以将int转换为API

And I ran the plumber code on it to convert int into an API

library(plumber)
r <- plumb("~/Work/myfile.R")
r$run(port=8000)

现在,当我使用get对其执行POST请求时

And Now when I perform an POST request on it using I get

curl -XPOST 'localhost:8000/test
-> {"speech":["aa"],"source":["bb"],"displayText":["cc"]}

但是我希望删除方括号.在简单的toJSON调用中,可以使用auto_unbox = TRUE来完成,但是如何在水管工中做到这一点. 如何编写自定义序列化程序并在上面的代码中使用它?

But I want the square brackets to be removed. In simple toJSON calls it can be done using auto_unbox=TRUE but how can I do it in plumber. How can I write a custom serializer and use it in the above code?

推荐答案

我想到了添加自定义序列化程序的过程. 假设我们要为JSON创建自定义序列化程序并将其命名为"custom_json" myfile.R应该是

I figured the process to add custom serializers. Let's say we want to make a custom serializer for JSON and name it "custom_json" myfile.R would be

#* @serializer custom_json
#* @post /test
test <- function(){
list(speech='aa',source='bb',displayText='cc')
}

在运行管道工代码时,它将显示为

And while running plumber code it would go as

library(plumber)
library(jsonlite)

custom_json <- function(){
  function(val, req, res, errorHandler){
    tryCatch({
      json <- jsonlite::toJSON(val,auto_unbox=TRUE)

      res$setHeader("Content-Type", "application/json")
      res$body <- json

      return(res$toResponse())
    }, error=function(e){
      errorHandler(req, res, e)
    })
  }
}

addSerializer("custom_json",custom_json)
r <- plumb("~/Work/myfile.R")
r$run(port=8000)

现在,当我使用get对其执行POST请求时

And Now when I perform an POST request on it using I get

curl -XPOST 'localhost:8000/test
-> {"speech":"aa","source":"bb","displayText":"cc"}

这篇关于R Plumber JSON序列化器auto_unbox的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆