1

我想json为 url 请求发送格式数据。我的代码如下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。num=1的lst列表如下所示;

$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

当我将它转换为jsonjsontoJSON(lst)格式时是正确的:

{"links":[{"source":0,"target":3},{"source":2,"target":5},{"source":1,"target":4}],"节点":[{"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_ 这意味着 R 中的空间。 url 请求的响应http://127.0.0.1:8000/getComm?num=1如下所示;

["{\"链接\":[{\"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\"}] ,\"定向\":[false],\"multigraph\":[false]}"]

这些斜线是从哪里来的?

4

1 回答 1

0

管道工将每​​个端点与一个“序列化程序”相关联——这个概念今天没有很好地记录——默认的序列化程序是 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

于 2017-05-21T23:57:29.427 回答