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

Java Groovy:将JSON数组转换为URLencoded字符串?,java,grails,groovy,smartthings,Java,Grails,Groovy,Smartthings,我正在自己的IDE中为SmartThings(www.SmartThings.com)编写一个应用程序。我这里有一个输入字段,应该是文本输入。我要一个出发地址: section("Departing From:"){ input "departFrom", "text", title: "Address?" } 当输入Monterey,CA的值时,该值神奇地变为一个JSON数组,其值为[Monterey,CA] 我想把这个值传递给一个httpGET语句,但我需要URLencode首先省

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

section("Departing From:"){
    input "departFrom", "text", title: "Address?"
}
当输入
Monterey,CA
的值时,该值神奇地变为一个JSON数组,其值为
[Monterey,CA]

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

我尝试了
join(“,”)
,但没有成功,因为它在值中添加了双引号

如何从该变量获取干净的
Monterey%2C%20CA
URL编码值


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

有不同类型的URL编码,但在本例中有两种:一种将空格转换为%20,另一种将空格转换为+

首先,您将使用UriUtils:

def yourEncodedString = UriUtils.encodeUri(yourString.toString(), "UTF-8")
对于第二种情况,您将使用UrlEncoder:

def yourEncodedString = URLEncoder.encode(yourString.toString(), "UTF-8")
或者(我认为)您可以使用URLEncoder和UTF-16来获得您想要的

我从来没有和UriUtils一起玩过,所以希望UrleEncoder能为您工作。

也许可以试试:

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

当涉及到更换
+
标志时,请参见

您是否尝试过是。它失败是因为它是一个数组,并且需要一个字符串。如上面的注释所述,URLencoder不工作,因为输入是一个数组而不是字符串。
tostring()
没有任何改进。结果是
%5B%22felton%22%2C%22+ca%22%5D
uriutils
在complier
java.lang.NullPointerException中失败:无法在null对象上调用方法encodeUri()
首先,确保您的测试编码正确:
def town=“felton,ca”def encodedTown=URLEncoder.encode(town,“UTF-8”)println encodedTown felton%2C+ca
您应该确保理解为什么需要%20而不是+。来自javadocs:此类包含用于将字符串转换为application/x-www-form-urlencoded MIME格式的静态方法。根据HTML规范:application/x-www-form-urlencoded与此内容类型一起提交的表单必须按如下方式编码:转义控件名称和值。空格字符替换为“+”。如果您仍然确信需要%20,您可以这样做:
println urlcoder.encode(“felton,ca”,“UTF-8”)。replace(“+”,“%20”)
`也许我不清楚,但正如我在OP和下面的评论中所述,我的问题是处理数组,而不是它是
%20
还是
+/code>。我得到的
%5B%22felton%22%2C%22+ca%22%5D
正在对括号和引号进行编码。