Заставьте plumber.R возвращать строки непосредственно в json, а не в списке с одним элементом - PullRequest
0 голосов
/ 04 ноября 2019

Когда в ответах моего водопроводчика есть строки, они всегда заключаются в списки, даже если это только одна строка, а не несколько строк в списке.

Я знаю, что именно так R обычно обрабатывает строки, как показано ниже

>  list(response = "This is my text")
$response
[1] "This is my text"

, но я не уверен, как манипулировать выводом в Plumber, чтобы получить желаемый формат вМой ответ JSON.

Мой код

library("plumber")

#* returns a fixed string
#* @get /mytext
get_mytext <- function(req, res) {
  return(list(response = "This is my text"))
}

Ожидаемый результат

{
  "response": "This is my text"
}

Фактический результат

{
  "response": [
    "This is my text"
  ]
}

1 Ответ

1 голос
/ 04 ноября 2019

Поскольку в R все является вектором, для кода нелегко угадать, из чего следует преобразовать одно значение или массив в JSON. Когда в массиве хранится одно значение, это называется «боксом». Вы можете изменить поведение бокса по умолчанию, изменив сериализатор, используемый для вашей конечной точки. Вы можете сделать

#* returns a fixed string
#* @serializer unboxedJSON
#* @get /mytext
get_mytext <- function(req, res) {
  return(list(response = "This is my text"))
}

, чтобы «распаковать» векторы длины по умолчанию 1.

В качестве альтернативы вы можете явно распаковать определенные значения в своем ответе

#* returns a fixed string
#* @get /mytext
get_mytext <- function(req, res) {
  return(list(response = jsonlite::unbox("This is my text")))
}
...