首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管道工JSON串行化器auto_unbox

管道工JSON串行化器auto_unbox
EN

Stack Overflow用户
提问于 2017-01-31 18:35:45
回答 2查看 2.4K关注 0票数 4

遵循页面http://plumber.trestletech.com/上的示例

我写了我的文件

代码语言:javascript
复制
#* @post /test
test <- function(){
list(speech='aa',source='bb',displayText='cc')
}

我在上面运行水管工代码,将int转换成API。

代码语言:javascript
复制
library(plumber)
r <- plumb("~/Work/myfile.R")
r$run(port=8000)

现在,当我在它上执行一个POST请求时,我使用

代码语言:javascript
复制
curl -XPOST 'localhost:8000/test
-> {"speech":["aa"],"source":["bb"],"displayText":["cc"]}

但我希望去掉方括号。在简单的toJSON调用中,它可以使用auto_unbox=TRUE完成,但我如何在水管工中完成。如何编写自定义序列化程序并在上述代码中使用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-01 08:23:15

我设计了添加自定义序列化程序的过程。假设我们想为JSON定制一个序列化程序,并将其命名为"custom_json“myfile.R。

代码语言:javascript
复制
#* @serializer custom_json
#* @post /test
test <- function(){
list(speech='aa',source='bb',displayText='cc')
}

当运行水管工代码的时候

代码语言:javascript
复制
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)

现在,当我在它上执行一个POST请求时,我使用

代码语言:javascript
复制
curl -XPOST 'localhost:8000/test
-> {"speech":"aa","source":"bb","displayText":"cc"}
票数 8
EN

Stack Overflow用户

发布于 2017-10-23 00:17:55

水管工提供一个序列化器的数目的盒子。unboxedJSON其中之一

只需在端点上使用@serializer unboxedJSON注释即可。

还可以将默认序列化程序设置为plumber::serializer_unboxed_json

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41965032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档