Groovy: преобразовать массив JSON в строку с URL-кодом?

Я пишу приложение для SmartThings (www.smartthings.com) в собственной IDE. У меня есть поле ввода здесь, которое должно быть для ввода текста. Я прошу адрес отправления:

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

при значении Monterey, CA значение магическим образом изменяется на массив JSON со значениями [Monterey, CA]

Я хочу передать это значение httpGET заявление, но мне нужно URLencode это сначала пропустить пробелы и т. д. Я пытался URLencoder без успеха из-за массива JSON.

я пытался join(",") без удачи, поскольку это добавляет двойные кавычки к значению.

Как я могу получить чистую Monterey%2C%20CA URL закодировал значение из этой переменной?

** имейте в виду, что кто-то может ввести любую комбинацию чисел, пробелов и запятых в этот ввод в качестве адреса. API mapquest, который я отправляю, может обрабатывать все эти вещи, если они не имеют специальных символов, а пробелы кодируются URL.

2 ответа

Может быть, попробуйте:

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

Когда дело доходит до замены + подписаться, пожалуйста, смотрите здесь

Существуют разные типы кодирования 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 будет работать для вас.

Другие вопросы по тегам