我使用Plumber(https://github.com/trestletech/plumber)为R源代码创建了一个Web API,其目的是处理json_string作为输入,并将其转换为R数据帧。
R代码:
#* @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请求的数据字段中的输入吗?非常感谢你!
答案 0 :(得分:0)
我设法通过将"data='{\"a\":\"b\"}'"
更改为"data={\"a\":\"b\"}"
来获得所需的输入。我只是从curl命令的--data字段中删除了单引号。
我认为R从curl接收到{\"a\":\"b\"}
后,它会自动将其视为字符串,因此在通过curl发送时,无需显式将其声明为'{\"a\":\"b\"}'
。