以下是制作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]"}
但这不是我需要的。我想打印出如下所示的ap
和bp
值没有双引号。
{"description":"test data","ap":[0, 1100, 4, 1096],"bp":[1101, 3, 6, 1098]}
我不知道如何在JSONObject中转义引号?
答案 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'), ']')
更好地解释,“[替换为[和]”替换为]
答案 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'