java库将JSON转换为URL编码
我们正在对一个非常不一致的(Zurmo-)REST API进行一些集成。API只接受URL编码的字符串作为其在http POST中的有效负载,但它使用JSON进行应答。 因此,由于文档对此非常不清楚,我们自然认为可以向其发布JSON,但事实并非如此
现在我们有了生成JSON的所有代码,当我们需要以x-www-form-urlencoded的形式发送它时,是否有java库可以将JSON转换为urlencoded字符串
我们目前正在使用该组织。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代码:
我们将rasmushaglunds的javascript代码翻译成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;
}
# 1 楼答案
如下所述,它不是Java库,但您应该能够翻译它:)
下面是如何用javascript实现这一点:
那就叫它
根据上面给出的示例字符串,它返回
它应该在嵌套数组上递归工作。您也可以考虑为函数编写一个包装器,以便只需要一个参数。
# 2 楼答案
现在有一种更简单的方法,那就是使用
URLEncoder.encode
方法导入
URLEncoder
包:然后:
你可以在这里测试你的结果:
https://onlinejsontools.com/url-decode-json
# 3 楼答案