Библиотека для преобразования JSON в urlencoded

Мы делаем некоторую интеграцию с довольно противоречивым (Zurmo-) REST API. API принимает только строки в кодировке urlencoded в качестве полезной нагрузки в сообщениях http, но он отвечает JSON. Так как документация по этому вопросу была очень неясной, мы, естественно, думали, что сможем опубликовать в ней JSON, но это не так.

Итак, теперь у нас есть весь наш код, генерирующий JSON, когда нам нужно отправить его как x-www-form-urlencoded, есть лиЯва библиотека, которая может сделать преобразование из JSON в строку с urlencoded?

В настоящее время мы используем lib org.json, но мы можем изменить его, если в этом будет необходимость.

Пример:

Эта строка JSON:

{"data":{"description":"test","occurredOnDateTime":"2013-10-24 01:44:50"}}

Должен быть преобразован в это:

data%5Bdescription%5D=test&data%5BoccurredOnDateTime%5D=2013-10-24+01%3A44%3A50

Java-код:

Мы перевели javascript-код rasmushaglunds в java и завернули его, вот результат, если кто-нибудь еще наткнется на эту проблему.

public static String jsonToURLEncoding(JSONObject json) {
    String output = "";
    String[] keys = JSONObject.getNames(json);
    for (String currKey : keys)
        output += jsonToURLEncodingAux(json.get(currKey), currKey);

    return output.substring(0, output.length()-1);
}

private static String jsonToURLEncodingAux(Object json, String prefix) {
    String output = "";
    if (json instanceof JSONObject) {
        JSONObject obj = (JSONObject)json;
        String[] keys = JSONObject.getNames(obj);
        for (String currKey : keys) {
            String subPrefix = prefix + "[" + currKey + "]";
            output += jsonToURLEncodingAux(obj.get(currKey), subPrefix);
        }
    } else if (json instanceof JSONArray) {
        JSONArray jsonArr = (JSONArray) json;
        int arrLen = jsonArr.length();

        for (int i = 0; i < arrLen; i++) {
            String subPrefix = prefix + "[" + i + "]";
            Object child = jsonArr.get(i);
            output += jsonToURLEncodingAux(child, subPrefix);
        }
    } else {
        output = prefix + "=" + json.toString() + "&";
    }

    return output;
}

Ответы на вопрос(2)

Ваш ответ на вопрос