1

我使用 Plumber ( https://github.com/trestletech/plumber ) 为 R 源代码创建了一个 Web API,其目的是将 json_string 作为输入处理,并将其转换为 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 请求的数据字段中的输入?非常感谢!

4

1 回答 1

2

我设法通过更改"data='{\"a\":\"b\"}'""data={\"a\":\"b\"}". 我只是从 curl 命令的 --data 字段中删除了单引号。

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

于 2019-04-23T08:08:50.670 回答