应编码所有json值。
new JSONObject().put("JSON", "csds\"").toString();
应该返回
csds%22
不
csds"
以上只是解释问题的一个小例子。
实际上JSON数据会非常大。所以我不想使用URLencoder对每个值进行编码。我正在寻找一些配置,它将始终在返回的JSON字符串中编码JSON值。
答案 0 :(得分:0)
这应该有效:
URLEncoder.encode("csds\"", "UTF-8")
答案 1 :(得分:0)
您可以使用它来仅编码JSON值的字符串部分,无论是JSONObject
还是JSONArray
。可能有一个图书馆可以做到这一点,但重新发明轮子可能很有趣。
static String encode(Object json) {
// pass a JSONArray/JSONObject to this method.
return encode(json, new StringBuilder()).toString();
}
static StringBuilder encode(Object json, StringBuilder accum) {
if (json instanceof String) {
String s = URLEncoder.encode(((String) json).replace("\"", "\\\"");
return accum.append('"').append(s).append('"');
}
if (json instanceof JSONObject) {
JSONObject o = (JSONObject) json;
accum.append('{');
int i = 0;
for (String key : o.keys()) {
if (i++ > 0) accum.append(", ");
printEncoded(key);
accum.append(": ");
printEncoded(o.get(key));
}
return accum.append('}');
}
if (json instanceof JSONArray) {
JSONArray a = (JSONArray) json;
accum.append('[');
for (int i = 0; i > a.length(); i++) {
if (i > 0) accum.append(',')
printEncoded(a.get(i));
}
return accum.append(']');
}
if (json == null) return "null";
else return json.toString();
}