这并没有很好地记录,但事实证明这是使用jsonlite::toJSON
序列化程序 ( digits = 4
) 中的默认值的结果。这里有一些细节:
https://www.rplumber.io/articles/rendering-output.html
我看不到如何从参数化中将参数传递给该参数,但这是一种解决方法:
library(plumber)
#* @apiTitle A Test API
#* Run a simple function
#* @get /
function(req, res) {
x <- rnorm(1)
res$body <- jsonlite::toJSON(x, digits = NA)
res
}
# plumb("plumber_1.R")$run(port = 5762)
# Save this file as e.g. "plumber_1.R" and run the commented line
然后你应该能够得到这样的响应:
library(httr)
y <- GET("http://127.0.0.1:5762/")
content(y, as = "text")
[1] "[-0.982448323838634]"
因此,无论您的函数的结果是什么,使用 对其进行预序列化jsonlite::toJSON(..., digits = NA)
,并将其直接存储在响应体中,然后返回响应对象。
事实证明,有一种“正确”的方法可以做到这一点,我通过将其归档为 GitHub 问题https://github.com/trestletech/plumber/issues/403发现了这一点。但是,看起来这个版本还没有在 CRAN 上,所以你可以同时使用上面的修复。
在您的 API 定义中,像这样指定序列化程序:
#' @serializer json list(digits = 12)
或者专门针对 json
#' @json(digits = 12)