Есть ли в Android SDK функция - аналог jQuery.param()?

101
22 июня 2021, 00:00

В библиотеке jQuery есть функция param()

Она превращает JS-объект в набор параметров для HTTP-запроса

Пример: объект {a:'x',b:{c:[0,1]}}

$.param({a:'x',b:{c:[0,1]}})
"a=x&b%5Bc%5D%5B%5D=0&b%5Bc%5D%5B%5D=1"

Эта строка закодирована через encodeURIComponent()

Ее можно раскодировать через decodeURIComponent()

decodeURIComponent($.param({a:'x',b:{c:[0,1]}}))
"a=x&b[c][]=0&b[c][]=1"

То есть объект закодирован в набор параметров:

a=x
b[c][]=0
b[c][]=1

Мне надо в мобильном приложении закодировать объект перед отправкой на сервер так же, как это делает jQuery.param()

Внимание, вопрос: есть ли в Android SDK такая функция?

Answer 1

Пока народ молчит, приведу самодельный вариант нужной мне функции на Kotlin:

fun serialize(data: JSONObject): String {
    var result = arrayListOf<String>()
    fun parse(value: Any, name: String, alt: String? = null) {
        if (value is JSONObject) {
            val keys = value.keys()
            while (keys.hasNext())
                keys.next().let {
                    parse(value[it], "$name[$it]")
                }
        } else if (value is JSONArray) {
            for (i in 0 until value.length())
                parse(value[i], "$name[$i]", "$name[]")
        } else {
            result.add(Uri.encode(alt ?: name) + "=" + Uri.encode("$value"))
        }
    }
    val keys = data.keys()
    while (keys.hasNext())
        keys.next().let {
            parse(data.get(it), it)
        }
    return result.joinToString("&")
}

Здесь даже учтен нюанс, что в некоторых случаях индекс массива не указывается

Я проверил, работает идентично. Но все же хотелось бы обойтись без самодеятельности :-)

READ ALSO
Позиционирование label

Позиционирование label

Не получается задать позиционирование тексту для загрузки аватараЕсть еще одна проблема, имеется выпадающее меню в вверху, она перестала...

92
Создание прелоадера SVG не круглой формы

Создание прелоадера SVG не круглой формы

Необходимо создать SVG прелоадер для сайта, но не умею работать с самими SVG (рисовать правильно)Идея такая:

102
Как сверстать стул как на картинке?

Как сверстать стул как на картинке?

Как сверстать такой стул, как на картинке, чтобы ножки не вылезали, а сиденье вылезало за пределы круга?

106