为 url 请求发送 json 时的额外斜杠
Extra slashes when sending json for url request
我想为 url 请求发送 json
格式的数据。我的代码如下,输入 num
;
#* @get /getComm
getComm <- function(num=1){
library(jsonlite)
#some computation here
lst<-list(links=linksff,nodes=sc,directed=FALSE,multigraph=FALSE)
return(toJSON(lst))
}
我使用 plumber
库将我的代码制作成 API。
lst
列表如下 num=1;
$links
source target
1 0 3
2 2 5
3 1 4
$nodes
size score id type
1 10 10 7 circle
2 10 10 179 circle
3 10 10 128 circle
4 10 10 191 circle
5 10 10 239 circle
6 10 10 218 circle
$directed
[1] FALSE
$multigraph
[1] FALSE
当我通过 toJSON(lst)
将它转换为 json
时 json 格式是正确的:
{"links":[{"source":0,"target":3},{"source":2,"target":5},{"source":1,"target":4}],"nodes":[{"size":10,"score":10,"id":7,"type":"circle"},{"size":10,"score":10,"id":179,"type":"circle"},{"size":10,"score":10,"id":128,"type":"circle"},{"size":10,"score":10,"id":191,"type":"circle"},{"size":10,"score":10,"id":239,"type":"circle"},{"size":10,"score":10,"id":218,"type":"circle"}],"directed":[false],"multigraph":[false]}
然而,当我发送 url 请求以获取 json 时,浏览器无法正确诊断 json
格式并且是额外的 slashe_which 我知道意味着 space 在 R 中。
url 请求 http://127.0.0.1:8000/getComm?num=1
的响应如下所示;
["{\"links\":[{\"source\":0,\"target\":3},{\"source\":2,\"target\":5},{\"source\":1,\"target\":4}],\"nodes\":[{\"size\":10,\"score\":10,\"id\":7,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":179,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":128,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":191,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":239,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":218,\"type\":\"circle\"}],\"directed\":[false],\"multigraph\":[false]}"]
这些斜线是从哪里来的?
plumber 将每个端点与 "serializer" 相关联——这个概念今天没有得到很好的记录——默认的序列化器是 JSON。
@effel 是正确的,反斜杠正在转义引号。您在响应中看到的是一个包含 toJSON
结果的字符串。你已经有效地对你的对象进行了双重编码——首先使用你自己的 toJSON
调用来获取一个字符串,然后管道工再次将该字符串编码为 JSON,从而产生反斜杠。
我怀疑您实际上只想 return 对象,而不是 JSON 序列化,您会得到正确的答案。
#* @get /getComm
getComm <- function(num=1){
#some computation here
lst<-list(links=linksff,nodes=sc,directed=FALSE,multigraph=FALSE)
return(lst)
}
如果您确实出于某种原因确实需要进行自己的自定义 JSON 序列化,请参阅此答案以了解如何告诉管道工不要序列化您的输出。
我想为 url 请求发送 json
格式的数据。我的代码如下,输入 num
;
#* @get /getComm
getComm <- function(num=1){
library(jsonlite)
#some computation here
lst<-list(links=linksff,nodes=sc,directed=FALSE,multigraph=FALSE)
return(toJSON(lst))
}
我使用 plumber
库将我的代码制作成 API。
lst
列表如下 num=1;
$links
source target
1 0 3
2 2 5
3 1 4
$nodes
size score id type
1 10 10 7 circle
2 10 10 179 circle
3 10 10 128 circle
4 10 10 191 circle
5 10 10 239 circle
6 10 10 218 circle
$directed
[1] FALSE
$multigraph
[1] FALSE
当我通过 toJSON(lst)
将它转换为 json
时 json 格式是正确的:
{"links":[{"source":0,"target":3},{"source":2,"target":5},{"source":1,"target":4}],"nodes":[{"size":10,"score":10,"id":7,"type":"circle"},{"size":10,"score":10,"id":179,"type":"circle"},{"size":10,"score":10,"id":128,"type":"circle"},{"size":10,"score":10,"id":191,"type":"circle"},{"size":10,"score":10,"id":239,"type":"circle"},{"size":10,"score":10,"id":218,"type":"circle"}],"directed":[false],"multigraph":[false]}
然而,当我发送 url 请求以获取 json 时,浏览器无法正确诊断 json
格式并且是额外的 slashe_which 我知道意味着 space 在 R 中。
url 请求 http://127.0.0.1:8000/getComm?num=1
的响应如下所示;
["{\"links\":[{\"source\":0,\"target\":3},{\"source\":2,\"target\":5},{\"source\":1,\"target\":4}],\"nodes\":[{\"size\":10,\"score\":10,\"id\":7,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":179,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":128,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":191,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":239,\"type\":\"circle\"},{\"size\":10,\"score\":10,\"id\":218,\"type\":\"circle\"}],\"directed\":[false],\"multigraph\":[false]}"]
这些斜线是从哪里来的?
plumber 将每个端点与 "serializer" 相关联——这个概念今天没有得到很好的记录——默认的序列化器是 JSON。
@effel 是正确的,反斜杠正在转义引号。您在响应中看到的是一个包含 toJSON
结果的字符串。你已经有效地对你的对象进行了双重编码——首先使用你自己的 toJSON
调用来获取一个字符串,然后管道工再次将该字符串编码为 JSON,从而产生反斜杠。
我怀疑您实际上只想 return 对象,而不是 JSON 序列化,您会得到正确的答案。
#* @get /getComm
getComm <- function(num=1){
#some computation here
lst<-list(links=linksff,nodes=sc,directed=FALSE,multigraph=FALSE)
return(lst)
}
如果您确实出于某种原因确实需要进行自己的自定义 JSON 序列化,请参阅此答案以了解如何告诉管道工不要序列化您的输出。