如何漂亮地打印一个复杂的 Java 对象(例如,带有作为对象集合的字段)?

新手上路,请多包涵

我正在寻找一个库函数 (最好来自常用框架,例如 Spring、Guava、Apache Commons 等) ,它可以很好地打印任何 Java 对象的值。

这是一个普遍的问题,而不是一个具体的问题。在 StackOverflow 上看到过类似的问题,常见的答案是“在类上实现你自己的 toString() 方法”,但这个选项并不总是实用 - 我正在寻找一种对任何对象执行此操作的通用方法我遇到,这可能源自第三方代码。另一个建议是使用 Apache Commons 的 RefectionToStringBuilder ,例如:

 new ReflectionToStringBuilder(complexObject, new RecursiveToStringStyle()).toString()

但这用途有限——例如,当它遇到一个集合时,它往往会输出如下内容:

 java.util.ArrayList@fcc7ab1[size=1]

一个实际的用例示例是记录从 JGit 的 Iterable<PushResult> pushCommand.call() 方法 - 如果发布答案,请确保它适用于此以及任何其他复杂对象。

原文由 Steve Chambers 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 860
2 个回答

您可以尝试使用 Gson。它还序列化数组、地图或其他任何东西……

 MyObject myObject = new MyObject();
Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create();
gson.toJson(myObject);

对于反序列化使用:

 gson.fromJson(MyObject.class);

对于类型化地图,请参阅此答案: Gson: Is there an easiest way to serialize a map

原文由 Naxos84 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 Jackson ObjectMapper 类用于将数据与 json 绑定。你可以像下面这样使用它:

 ObjectMapper mapper = new ObjectMapper();

您可以将 json 保存到对象中,如下所示

Object json = mapper.readValue(input,object.class);

你可以把它写在字符串变量中

String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json);

它应该工作正常。

原文由 Sagar Trivedi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题