Groovy:将JSON数组转换为URLencoded字符串?

时间:2014-07-16 21:19:31

标签: java grails groovy smartthings

我正在自己的IDE中为SmartThings(www.smartthings.com)编写应用程序。我这里有一个输入字段,应该是文本输入。我要求出发地址:

section("Departing From:"){
    input "departFrom", "text", title: "Address?"
}

当放入Monterey, CA的值时,该值会神奇地变为具有[Monterey, CA]

值的JSON数组

我想将此值传递给httpGET语句,但我需要URLencode首先省略空格等。由于JSON数组,我尝试URLencoder但没有成功

我试过join(",")没有运气,因为它会为值添加双引号。

如何从此变量中获取干净的Monterey%2C%20CA网址编码值?

**请记住有人可以将数字,空格和逗号的任意组合输入到此输入中作为地址。我发送给它的mapquest API可以处理所有这些事情,只要它们没有特殊字符并且空格是URL编码的。

2 个答案:

答案 0 :(得分:0)

也许试试:

def l = ['Monterey', 'CA']
assert URLEncoder.encode(l.join(', ')).replaceAll('\\+','%20') == 'Monterey%2C%20CA'

在更换+符号时,请参阅here

答案 1 :(得分:-1)

有不同类型的URL编码,但在这种情况下有两种:一种将空格转换为%20,另一种将空格转换为+。

首先,您使用UriUtils:

def yourEncodedString = UriUtils.encodeUri(yourString.toString(), "UTF-8")

对于第二个,您使用UrlEncoder:

def yourEncodedString = URLEncoder.encode(yourString.toString(), "UTF-8")

或者(我认为)你可以使用URLEncoder和UTF-16来获得你想要的东西。

我从未和UriUtils度过愉快的时光,所以希望UrlEncoder能为您效劳。