问题
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