Почему существует лексическая ошибка: неверный символ в тексте json, когда json_string отправляется через curl, но не в консоли R? - PullRequest
0 голосов
/ 22 апреля 2019

Я использовал Plumber (https://github.com/trestletech/plumber) для создания веб-API для исходного кода R, целью которого является обработка json_string в качестве входных данных и преобразование его в фрейм данных R.

Rcode:

#* @param data
#* @post /predict
jsonToDF <- function(data) {
    library(jsonlite)
    dat <- fromJSON(data)
}

Как видно из приведенного выше кода, я использую библиотеку jsonlite и метод fromJSON().

Затем я выставил службу локально с помощью:

library(plumber) 
r <- plumb("code.R")
r$run(port=54321)

Я использовал запрос curl:

curl -v -i -X POST -H "Content-Type: application/json" --data "testData='{\"a\":\"b\"}'" http://localhost:54321/predict 

, чтобы отправить json_string ({"a":"b"}), но я получил эту ошибку:

<simpleError: lexical error: invalid char in json text.
                                       '{"a":"b"}'
                     (right here) ------^

Я использовал консоль R для двойной проверки правильности ввода, и я не получил того же сообщения об ошибке.

> z <- fromJSON('{"a":"b"}')
> z
$a
[1] "b"

Может кто-нибудь объяснить мне, почему он работает в консоли R, но не как вход вполе данных запросов curl? Большое спасибо!

1 Ответ

0 голосов
/ 23 апреля 2019

Мне удалось получить нужный ввод, изменив "data='{\"a\":\"b\"}'" на "data={\"a\":\"b\"}".Я просто удалил одинарные кавычки из поля --data команды curl.

Я думаю, что R автоматически воспринимает {\"a\":\"b\"} как строку после получения ее из curl, поэтому мне не нужно было явнообъявить его как '{\"a\":\"b\"}' при отправке через curl.

...