当前位置: 首页 > 面试题库 >

为什么Gson会漂亮地打印到控制台,而不打印到文件?

年高洁
2023-03-14
问题内容

我有一个类,我们称它为Cls,其中包含一些值。当我使用声明为的Gson实例GsonBuilder.setPrettyPrinting().create()并将其用于序列化Cls对象并将结果JSON字符串打印到控制台时,我得到了格式正确的格式,如下所示:

{
    "foo":"bar",
    "foo2":["b1","b2"],
    "foo3":12
}

这一切都很好,但是当我然后创建一个JsonWriter(从具有绝对路径的FileWriter)并使用toJson(Object, Class, JsonWriter)带有Cls 的Gson实例的方法时,生成的文件就不会得到很好的格式化。相反,它看起来像这样:

{"foo":"bar","foo2":["b1","b2"],"foo3":12}

这打败了漂亮印刷的全部要点。为什么要这样做,如何停止?


问题答案:

大概您正在使用类似这样的东西

Gson gson = new GsonBuilder().setPrettyPrinting().create();

try (FileWriter fileWriter = ...) {
    gson.toJson(new Example(), Example.class, new JsonWriter(fileWriter));
}

JsonWriter未从所创建的Gson对象,并且因此不被配置为漂亮打印。您可以改为使用以下方法JsonWriterGson对象中检索实例newJsonWriter

gson.toJson(new Example(), Example.class, gson.newJsonWriter(fileWriter));

哪一个

返回为此Gson实例上的设置配置的新JSON编写器。

该实例将打印精美。

您也可以indent在自己的实例上设置

JsonWriter jsonWriter = new JsonWriter(fileWriter);
jsonWriter.setIndent("  ");
gson.toJson(new Example(), Example.class, jsonWriter);


 类似资料:
  • 下面是我的例子: 如何为JSONARRAY启用漂亮的打印? 我认为这足以解释我的问题,但是这里有一些bla bla bla bla bla bla因为stackoverflow问我更多的细节,让我发布问题。

  • 我在NetBeans IDE中使用Java编写了一个简单的程序。在今天早上对main方法做了一些更改后,当我运行程序时,控制台不会打印任何东西。我只是想让它到达startMenus(sc)。编辑:我现在已经放入了一些system.out.println(),但它没有达到“blah2”,就在我的第一个循环之后...

  • 问题内容: 我试图使我的数据集与此示例相对应: 我有一个名称和与那些名称可以引用的特定实体相对应的唯一字母数字值,我们将这些条目称为“ ID”。 因此,例如,可能与ID有关,因为这是一个非常具体的参考,因此没有很多广为人知的具有该名称的图形。然而,可能被附加到,和,引用也许是男人,啤酒和灌木,没有特定的顺序。 看起来像这样(实际的更大): 使用杰克逊,我这样尝试: 但这似乎是错误的,因为我的输出全

  • 问题内容: 我有一个字符串,它表示要打印的非缩进XML。例如: 应该变成: 语法高亮不是必需的。为了解决该问题,我首先将XML转换为添加回车符和空格,然后使用pre标记输出XML。为了添加新行和空白,我编写了以下函数: 然后,我像这样调用该函数: 这对我来说很好用,但是当我编写上一个函数时,我认为必须有更好的方法。所以我的问题是,给定XML字符串以将其漂亮地打印在html页面中,您是否知道更好的方

  • 问题内容: 我正在寻找一种漂亮地打印的好方法。 给我: 我希望地图输入值具有更大的自由度,并且正在寻找更多类似这样的东西: 我写了这段代码: 但是我敢肯定,有一种更优雅,更简洁的方法可以做到这一点。 问题答案: 或将您的逻辑放在一个整洁的小班上。 用法: 注意:您也可以将该逻辑放入实用程序方法中。

  • 我正在寻找一种漂亮的方法来打印地图。 <代码>贴图。toString()给我: