首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对JSONObject toString输出应用编码?

如何对JSONObject toString输出应用编码?
EN

Stack Overflow用户
提问于 2017-09-21 21:39:10
回答 2查看 911关注 0票数 0

所有的json值都应该进行编码。

代码语言:javascript
运行
复制
new JSONObject().put("JSON", "csds\"").toString();

应该返回

代码语言:javascript
运行
复制
csds%22

代码语言:javascript
运行
复制
csds"

上面只是一个小例子来解释这个问题。

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

EN

回答 2

Stack Overflow用户

发布于 2017-09-21 21:44:53

这应该是可行的:

代码语言:javascript
运行
复制
URLEncoder.encode("csds\"", "UTF-8")
票数 0
EN

Stack Overflow用户

发布于 2017-09-21 22:55:05

您可以使用它对JSON值的字符串部分进行编码,无论是JSONObject还是JSONArray。可能有一个库可以做到这一点,但是重新发明轮子可能很有趣。

代码语言:javascript
运行
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46345503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档