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

4 java json gson jsonobject

下面是我制作JSONObject然后打印出来的方法JSONString.

我正在使用谷歌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();
}
Run Code Online (Sandbox Code Playgroud)

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

{"description":"test data","ap":"[0, 1100, 4, 1096]","bp":"[1101, 3, 6, 1098]"}
Run Code Online (Sandbox Code Playgroud)

但这不是我需要的.我想打印出来,如下面没有双引号apbp值.

{"description":"test data","ap":[0, 1100, 4, 1096],"bp":[1101, 3, 6, 1098]}
Run Code Online (Sandbox Code Playgroud)

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

Sot*_*lis 5

你的问题是

jsonObject.addProperty("ap", ap.toString());
Run Code Online (Sandbox Code Playgroud)

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

你必须将你转换Set成一个JsonElement(JsonArray真的,但你不会看到).

Gson某处创建一个对象

Gson gson = new Gson();
Run Code Online (Sandbox Code Playgroud)

并使用它将您的Set元素转换为JsonElement对象并将其添加到JsonObject.

jsonObject.add("ap", gson.toJsonTree(ap));
jsonObject.add("bp", gson.toJsonTree(bp));
Run Code Online (Sandbox Code Playgroud)

Gson有它的约定,它将a Set转换JsonArray为a子类型,JsonElement因此你可以添加它JsonObject#add(String, JsonElement).