我想为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当我通过json将其转换为toJSON(lst)时,json格式是正确的:
{“链接”:{“源”:0,“目标”:3},{“源”:2,“目标”:5},{“源”:1,“目标”:4},“节点”:{“大小”:10,“分数”:10,“类型”:“圆形”},{“大小”:10,“分数”:10,"id":179,“类型”:“圆形”},{“大小”:10,“得分”:10,"id":128,“类型”:“圆形”},{“大小”:10,“分数”:10,"id":191,“类型”:“圆形”},{“大小”:10,“分数”:10,"id":239,“类型”:“圆形”},{“大小”:10,“分数”:10,"id":218,“类型”:“圆”},“定向”:“false”:false,“多重图”:false}
但是,当我发送url请求获取json时,浏览器无法正确诊断json格式,并且我知道的是额外的slashe_which意味着R中的空间,对于url请求http://127.0.0.1:8000/getComm?num=1的响应如下;
[“{\”链接“:{\”源\“:0,\”目标\“:3},{\”源\“:2,\”目标\“:5},{\”源\“:1,\”目标\“:4},\”节点\“:{\”大小\“:10,\”得分“:10,\"id\":7,\”类型\“:\”圆形“},{\”大小\“:10,\“得分”:10,\"id\":179,\“类型\”:\“圆形”},{\“大小\”:10,\“分数”:10,\"id\":128,\“类型\”:\“圆形”},{\“大小\”:10,\“分数\”:10,\“id\”类型:191,\“类型\”:\“圆形”},{\“大小”:10,\“得分”:10,\"id\":239,\“类型\”:\“圆形”},{\“大小\”:10,\“分数”:10,\"id\":218,\“类型\”:\“圆”},\“有向的\”:false,\“多重图”:假}]
这些斜线是从哪里来的?
发布于 2017-05-21 23:57:29
水管工将每个端点与一个“序列化程序”关联起来--这个概念目前还没有得到很好的记录--默认的序列化程序是JSON。
@effel是正确的,反斜杠正在转义引号。您在响应中看到的是包含toJSON结果的单个字符串。实际上,您已经对对象进行了双重编码--首先使用您自己的toJSON调用获得一个字符串,然后水管工会将该字符串编码为JSON,从而产生反斜杠。
我怀疑您实际上只是想返回对象,而不是JSON序列化,您将得到正确的答案。
#* @get /getComm
getComm <- function(num=1){
#some computation here
lst<-list(links=linksff,nodes=sc,directed=FALSE,multigraph=FALSE)
return(lst)
}如果您确实出于任何原因需要自己进行自定义JSON序列化,请参阅这个关于如何告诉水管工不要序列化输出的答案。https://stackoverflow.com/a/44092595/1133019
https://stackoverflow.com/questions/44098554
复制相似问题