java - 如何在json字符串java中的数字之间留一个空格?

标签 java json regex string gson

在下面的代码中,我使用 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/

相关文章:

java - 如何检查输入字符串是否包含空格?

java - 测试 Android 应用程序内谷歌地图 View 的功能

java - 当查询对数据库进行排序时,无法使用 ResultSet 删除行

javascript - 更新图表中的数据(下拉)

json - 通过 npm run 运行时 Webpack 失败

MySQL - 需要查找其中没有句号的记录

java - Java 中相对文件路径的绝对路径

java - 如何通知一个线程,另一个线程已经完成了它的执行?

javascript - d3从mysql数据库导入数据返回 "undefined"

C# Linq 和 Regexing 非 unicode