如何在JSON对象中转义引号?

时间:2014-02-22 04:29:29

标签: java json gson jsonobject

以下是制作JSONObject然后打印JSONString的方法。

我正在使用Google GSON。

private String generateData(ConcurrentMap<String, Map<Integer, Set<Integer>>> dataTable, int i) {

    JsonObject jsonObject = new JsonObject();

    Set<Integer> ap = dataTable.get("TEST1").get(i);
    Set<Integer> bp = dataTable.get("TEST2").get(i);

    jsonObject.addProperty("description", "test data");
    jsonObject.addProperty("ap", ap.toString());
    jsonObject.addProperty("bp", bp.toString());

    System.out.println(jsonObject.toString());

    return jsonObject.toString();
}

目前,如果我打印出jsonObject.toString(),那么它会打印出来 -

{"description":"test data","ap":"[0, 1100, 4, 1096]","bp":"[1101, 3, 6, 1098]"}

但这不是我需要的。我想打印出如下所示的apbp值没有双引号。

{"description":"test data","ap":[0, 1100, 4, 1096],"bp":[1101, 3, 6, 1098]}

我不知道如何在JSONObject中转义引号?

4 个答案:

答案 0 :(得分:5)

你的问题是

jsonObject.addProperty("ap", ap.toString());

您正在添加一个属性,该属性是Java中String的{​​{1}}表示形式。它与JSON无关(即使格式看起来相同)。

您必须将Set转换为Set(实际为JsonElement,但您不会看到这一点。)

在某处创建JsonArray对象

Gson

并使用它将Gson gson = new Gson(); 元素转换为Set个对象,并将其添加到JsonElement

JsonObject

Gson有自己的约定,它会将jsonObject.add("ap", gson.toJsonTree(ap)); jsonObject.add("bp", gson.toJsonTree(bp)); 转换为Set,这是JsonArray的子类型,因此您可以使用JsonElement添加它。

答案 1 :(得分:0)

如果你真的需要一个字符串,也许可以尝试正则表达式...

string.replace(new RegExp('("\\[)', 'g'), '[').replace(new RegExp('(\\]")', 'g'), ']')

更好地解释,“[替换为[和]”替换为]

问题不是他使用JSON对象的方法,而是如何转义数组引号。

答案 2 :(得分:0)

如果您使用的是Android平台23,那么您应该可以使用org.json.JSONObject:

private String generateData(ConcurrentMap<String, Map<Integer, Set<Integer>>> dataTable, int i) {
JSONObject jsonObject = new JSONObject();
try {
    JSONArray apArray = new JSONArray();
    for (Integer i : ap) {
        apArray.put(i.intValue());
    }
    JSONArray bpArray = new JSONArray();
    for (Integer i : bp) {
        bpArray.put(i.intValue());
    }

    jsonObject.put("description", "test data");

    jsonObject.put("ap", apArray);
    jsonObject.put("bp", bpArray);
    Log.d("Json string", jsonObject.toString());
}catch(JSONException e){
    Log.e("JSONException",e.getMessage());
}

System.out.println(jsonObject.toString());
return jsonObject.toString();
}

答案 3 :(得分:0)

使用StringEscapeUtils:

import org.apache.commons.lang3.StringEscapeUtils;

(...)

myString = StringEscapeUtils.escapeJson(myString);

在Android上,请记得更新你的app / build.gradle:

compile 'org.apache.commons:commons-lang3:3.4'