Library to convert JSON to urlencoded Library to convert JSON to urlencoded json json

Library to convert JSON to urlencoded


public static String objectToUrlEncodedString(Object object, Gson gson) {    return jsonToUrlEncodedString((JsonObject) new JsonParser().parse(gson.toJson(object)));}private static String jsonToUrlEncodedString(JsonObject jsonObject) {    return jsonToUrlEncodedString(jsonObject, "");}private static String jsonToUrlEncodedString(JsonObject jsonObject, String prefix) {    String urlString = "";    for (Map.Entry<String, JsonElement> item : jsonObject.entrySet()) {        if (item.getValue() != null && item.getValue().isJsonObject()) {            urlString += jsonToUrlEncodedString(                    item.getValue().getAsJsonObject(),                    prefix.isEmpty() ? item.getKey() : prefix + "[" + item.getKey() + "]"            );        } else {            urlString += prefix.isEmpty() ?                    item.getKey() + "=" + item.getValue().getAsString() + "&" :                    prefix + "[" + item.getKey() + "]=" + item.getValue().getAsString() + "&";        }    }    return urlString;}


As noted below, it's not a Java library but you should be able to translate it :)

Here's how you could do it in javascript:

var jsonArrayToUrl = function (obj, prefix) {  var urlString = "";  for (var key in obj) {    if (obj[key] !== null && typeof obj[key] == "object") {      prefix += "[" + key + "]";      urlString += jsonArrayToUrl(obj[key], prefix);    }else{      urlString += prefix + "[" + key + "]=" + obj[key] + "&";    }  }  return encodeURIComponent(urlString);};

Then call it with

jsonArrayToUrl(test["data"], "data");

By the example string you gave above it returns

"data%5Bdescription%5D%3Dtest%26data%5BoccurredOnDateTime%5D%3D2013-10-24%2001%3A44%3A50%26"

It should work recursively on nested arrays. You might also consider writing a wrapper for the function so that you only need one argument.


There is an easier way now, and that is to use the URLEncoder.encode method.

Import the URLEncoder package:

import java.net.URLEncoder; 

and then:

URLEncoder.encode(objectMapper.writeValueAsString(<yourClass>), StandardCharsets.UTF_8.toString());

You can test your result here:

https://onlinejsontools.com/url-decode-json