How to escape the quotes in JSON Object?

你说的曾经没有我的故事 提交于 2019-12-30 22:54:08

问题


Below is my method which makes the JSONObject and then print out the JSONString.

I am using 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();
}

Currently if I print out the jsonObject.toString() then it prints out like this -

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

But this is not what I need. I want to print out like below which is without double quote on ap and bp values.

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

I am not sure how do I escape that quotes in the JSONObject?


回答1:


Your problem is that with

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

you are adding a property which is the String representation of a Set in Java. It has nothing to do with JSON (even if the format looks the same).

You will have to convert your Set into a JsonElement (a JsonArray really but you won't see that).

Create a Gson object somewhere

Gson gson = new Gson();

and use it to convert your Set elements to JsonElement objects and add them to the JsonObject.

jsonObject.add("ap", gson.toJsonTree(ap));
jsonObject.add("bp", gson.toJsonTree(bp));

Gson has its conventions, it converts a Set into a JsonArray which is a sub type of JsonElement and you can therefore add it with JsonObject#add(String, JsonElement).




回答2:


Use StringEscapeUtils:

import org.apache.commons.lang3.StringEscapeUtils;

(...)

myString = StringEscapeUtils.escapeJson(myString);

On Android, remember to update your app/build.gradle:

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



回答3:


Maybe try regex if you really need a string...

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

Better explained, "[ is replaced with [ and ]" is replaced with ]

Question was not his method of working with the JSON Object, it was how to escape array quotes.




回答4:


If you are using Android Platform 23 then you shall able to use org.json.JSONObject instead:

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();
}


来源:https://stackoverflow.com/questions/21949674/how-to-escape-the-quotes-in-json-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!