发送json请求url时出现额外的斜杠

时间:2017-05-21 15:25:11

标签: json r api jsonlite plumber

我想为网址请求发送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。 对于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

当我通过json将其转换为toJSON(lst)时,json格式是正确的:

  

{ “链接”:[{ “源”: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],” 多重图“:[FALSE]}

然而,当我发送url请求获取json时,浏览器无法正确诊断json格式,并且是额外的slashe_,我知道这意味着R中的空格。 网址请求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],\” 多重图\ “:[FALSE]}”]

这些斜杠来自何处?

1 个答案:

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