java - 如何使用 gson 正确格式化 json 字符串,在逗号后加一个空格?

标签 java json 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]}

我希望我的 json 字符串是这样的:意思是逗号后面应该有一个空格,所以它应该如下所示。

{"description":"Hello. World.", "data1":[0, 273, 546, 819, 1092, 559], "data2":[816, 1644, 1368, 276]}

我该怎么做?

更新:-

我尝试了这个,但它不起作用:

private String generateData(Map<String, Map<Integer, Set<Integer>>> nodeTable, int i) {

    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder = gsonBuilder.setPrettyPrinting();   //Sets pretty formatting
    Gson gson = gsonBuilder.create();       

    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(gson.toJson(jsonObject));

    return gson.toJson(jsonObject);
}

最佳答案

JSON字符串不应该包含不需要的白字,因为在大多数情况下它是传输数据的媒介,否则会增加带宽成本(可能很小但需要考虑)并且还会解析白字客户端的空格。

但是,如果您将其格式化为打印漂亮或看起来可读,您可以使用 GsonBuilder如下图设置

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder = gsonBuilder.setPrettyPrinting();   //Sets pretty formatting
Gson gson = gsonBuilder.create();                //Create Gson reference

System.out.println(gson.toJson(object));        //prints in pretty format

输出:

{
  "a": 5,
  "name": "Hello.world.",
  "someOtherString": "some other string"
}
<小时/>

更新的问题:

我不确定方法参数的类型,所以在下面的示例程序中我使用了字符串,所以它确实有效。我建议你从jsonObject.add("data1", gson.toJsonTree(pp));更改至jsonObject.addProperty("data1", gson.toJson(pp)); 。这可能会解决,请告诉我。

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder = gsonBuilder.setPrettyPrinting();   //Sets pretty formatting
Gson gson = gsonBuilder.create();                //Create Gson reference

JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("description", "Hello. World");
jsonObject.addProperty("asfaf", "New. World");
jsonObject.addProperty("asfa", "Old. World");

System.out.println(gson.toJson(jsonObject));

输出

{
  "description": "Hello. World",
  "asfaf": "New. World",
  "asfa": "Old. World"
}

关于java - 如何使用 gson 正确格式化 json 字符串,在逗号后加一个空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33648739/

相关文章:

java - 无法使用 Gson 库对 Firestore DocumentReference 数据类型进行序列化/反序列化

java - ObjectOutputStream 和 Jtable mouseClick 设置

php - var_dump 变量在 php 中不返回任何内容

java - 如何使用 Gson 序列化 Optional<T> 类?

javascript - 从 JSON 数据库检索结果

java - 将密码查询结果 (JSON) 解析为 Java 对象

java - 使用 GSON 获取 JSON 键名

java - 了解 Scala 中的 ArrayBuffer

java - 如何区分String中的两个字符串?(如何防止明文注入(inject))

java string.format函数格式标志异常