为什么会出现词法错误:通过curl发送json_string时,json文本中的char无效,而在R控制台中却没有?

时间:2019-04-22 11:18:06

标签: r json curl plumber

我使用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)
}

从上面的代码中可以看到,我正在使用库jsonlitefromJSON()方法。

然后我通过以下方式在本地公开该服务:

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 :(得分:0)

我设法通过将"data='{\"a\":\"b\"}'"更改为"data={\"a\":\"b\"}"来获得所需的输入。我只是从curl命令的--data字段中删除了单引号。

我认为R从curl接收到{\"a\":\"b\"}后,它会自动将其视为字符串,因此在通过curl发送时,无需显式将其声明为'{\"a\":\"b\"}'