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?
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)
.
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'
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.
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