在下面的代码中,我使用 gson 创建一个 json 字符串:
private String generateData(Map<String, Map<Integer, Set<Integer>>> nodeTable, int i) {
JsonObject jsonObject = new JsonObject();
Set<Integer> pp = nodeTable.get("TEXTER").get(i);
Set<Integer> sp = nodeTable.get("PETER").get(i);
// my above pp and sp variables shows correct values with one space between numbers.
jsonObject.addProperty("description", "Hello. World");
jsonObject.add("data1", gson.toJsonTree(pp));
jsonObject.add("data2", gson.toJsonTree(sp));
System.out.println(jsonObject.toString());
return jsonObject.toString();
}
当我得到 json 字符串时,我得到的结果是这样的。正如您所看到的,逗号后所有内容都彼此相邻,没有任何空格。我不想那样。
{"description":"Hello. World.","data1":[0,273,546,819,1092,559],"data2":[816,1644,1368,276]}
我希望 data1 和 data2 变量中的数字之间有一个空格,如下所示:
{"description":"Hello. World.","data1":[0, 273, 546, 819, 1092, 559],"data2":[816, 1644, 1368, 276]}
使用 gson 或其他方式可以做到这一点吗?
最佳答案
这似乎是一个可能存在错误的装饰性请求。最简单的方法可能是使用正则表达式:
jsonString = jsonString
.replaceAll("(\\d),(\\d)", "$1, $2")
.replaceAll("(\\d),(\\d)", "$1, $2")
上面的行只是捕获任何数字+逗号+数字序列,并在两个捕获和恢复的数字之间添加一个空格。由于 java catch 只匹配一次,因此不允许交叉,因此我们在这里执行两次。
不那么严格但不需要双重替换的替代方案:
jsonString = jsonString.replaceAll(",(\\d)", ", $1")
这里潜在的错误是这适用于整个 JSON 字符串,而不仅仅是编码集。
正确的方法™是使用 GSON 的自定义设置格式化程序。
顺便说一句, map 中的 map 需要类。
关于java - 如何在json字符串java中的数字之间留一个空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651395/