如何在R中解析和构建具有多值参数的URL查询字符串

3
有没有一种简单的方法在R中解析和构建具有多个值参数的URL查询字符串?
我期望像这样的东西
myqueryString <- parse_url("http://www.mysite.com/?a=1&a=2&b=val")$query
myqueryString
  $a
  [1] 1 2
  $b
  [1] "val"

而且。
urlElements <- list(scheme="http",path="www.mysite.com/",query=list(a=c(1,2),b="val"))
setattr(urlElements,"class","url")
build_url(urlElements)
  [1] "http://www.mysite.com/?a=1&a=2&b=val"

然而,httr 提供了
parse_url("http://www.mysite.com/?a=1&a=2&b=val")$query
 $a
 [1] "1"

 $a
 [1] "2"

 $b
 [1] "val"

而且。
builtURL <- build_url(urlElements)
builtURL
   [1] "http:///www.mysite.com/?a=c%281%2C%202%29&b=val"

这个最新的URL可以重新处理。
parse_url(builtURL)$query
 $a
 [1] "c(1, 2)"

 $b
 [1] "val"

我知道可以使用parse()eval()来获取a,但是似乎对于可以自由转储到URL的代码进行评估不太安全。 有什么建议吗?


你可以将 parse_url 的结果“折叠”为你所期望的格式。x <- list(a = "1", a = "2", b = "val"); lapply(split(x, as.factor(names(x))), function(y) do.call("c", y)) - Roman Luštrik
1个回答

2

看看这些是否可以将这两个参数列表格式进行转换:

mergeUrlArgs <- function(x) sapply(unique(names(x)), function(z) unlist(x[names(x) == z], use.names=FALSE), simplify=FALSE)

expandUrlArgs <- function(x) structure(do.call(c, lapply(x, function(z) as.list(z))), names=rep(names(x), sapply(x, length)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接