【问题标题】:How can I apply encoding on JSONObject toString output?如何在 JSONObject toString 输出上应用编码?
【发布时间】:2017-09-21 13:39:09
【问题描述】:

所有的 json 值都应该被编码。

new JSONObject().put("JSON", "csds\"").toString();

应该返回

csds%22

不是

csds"

以上只是解释问题的一个小例子。

实际上 JSON 数据会非常大。所以我不想使用 URLencoder 对每个值进行编码。我正在寻找一些配置,它将始终在返回的 JSON 字符串中编码 JSON 值。

【问题讨论】:

标签: java json string


【解决方案1】:

这应该可行:

URLEncoder.encode("csds\"", "UTF-8")

【讨论】:

  • JSON 会很大。我已经更新了这个问题。请看一下
  • @DixitSingla 想要达到什么目的?因为使用 URLencoder 或任何其他将编码的东西,Json 将与任何其他方法一样大
【解决方案2】:

您可以使用它仅对 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();
}

【讨论】:

    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多