Wir machen einige Integration in Richtung einer ziemlich inkonsistent (Zurmo-) REST API. Die API akzeptiert nur urlencodierte Zeichenfolgen als ihre Nutzlast in den HTTP-Posts, antwortet jedoch mit JSON. Da die Dokumentation zu diesem Thema sehr unklar war, dachten wir natürlich, wir könnten JSON dazu schreiben, aber das war nicht der Fall.Bibliothek zum Konvertieren von JSON in urlencodierte
So, jetzt haben wir alle unseren Code zu erzeugen JSON, wenn wir es als x-www-form-urlencoded senden müssen, gibt es eine java Bibliothek, die eine Umwandlung von JSON zu einer urlencoded Zeichenfolge tun kann?
Wir verwenden derzeit die org.json-Lib, aber wir können sie ändern, wenn es nötig wäre.
Beispiel:
Diese JSON-String:
data%5Bdescription%5D=test&data%5BoccurredOnDateTime%5D=2013-10-24+01%3A44%3A50
Java-Code:
{"data":{"description":"test","occurredOnDateTime":"2013-10-24 01:44:50"}}
Sollte in diese umgewandelt werden
Wir rasmu übersetzt shaglunds JavaScript-Code zu Java und wickelte es, hier ist das Ergebnis, wenn jemand anderes auf dieses Problem stolpert.
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;
}
Nicht in Java, aber sehr einfach für uns zu übersetzen, danke! – spydon