Biblioteca para convertir JSON a urlencoded

Estamos haciendo algo de integración hacia una API REST bastante inconsistente (Zurmo-). La API solo acepta cadenas codificadas como su carga útil en las publicaciones http, pero responde con JSON. Así que como la documentación no estaba muy clara al respecto, naturalmente pensamos que podríamos publicarlo con JSON, pero este no fue el caso.

Así que ahora tenemos todo nuestro código que genera JSON cuando necesitamos enviarlo como x-www-form-urlencoded, ¿hay algúnJava biblioteca que puede hacer una conversión de JSON a una cadena urlencoded?

Actualmente estamos usando org.json lib, pero podemos cambiarlo si fuera necesario.

Ejemplo:

Esta cadena JSON:

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

Debería convertirse en esto:

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

Código de Java:

Tradujimos el código javascript de rasmushaglunds a java y lo envolvimos, aquí está el resultado si alguien más encuentra este problema.

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;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta