【问题标题】:Pretty-print object hierarchy in Java?Java中漂亮的打印对象层次结构?
【发布时间】:2014-04-07 17:38:44
【问题描述】:

我正在开展一个数据分析项目,我们在该项目中代表您在一种语言中找到的许多基本实体。尽管出于调试目的,我想找到一种更好的方法来打印出他们的对象图。因此,例如,我们可能有:

Function: Average
Description: some description
Overload #1:
    parameter-set: paramset-a
        columns: 
           currency: string
           value: double
           scale: integer
    result-set: result-set-a
    preference: first-find
Overload #2: ...
Overload #3: ...

我的问题

假设在上面的例子中,Function 是我的根对象。函数有一些属性和一系列重载,每个重载都有自己的属性和子对象。

是否有一个库可以帮助我以格式良好的方式打印根函数下的对象图?

PS:上面的例子比较琐碎;在我们的许多案例中,对象层次结构有 6 到 10 层深,这才是真正的问题所在。

【问题讨论】:

  • 对象是否具有属性,其中一些具有必须递归到的子节点?当我不得不像这样格式化数据时,一个简单的递归枚举,它有一个缩进参数,在每个递归级别都会增加。
  • 是的,他们有属性。我的想法和你一样……也许就像我可以为每个实体调用的“toString(int tabs)”函数,我只是返回实体的选项卡+正常的toString()。我有点希望有一个库可以打印出每个类的属性,以避免额外的代码。
  • 嗯,我不知道。也许其他人会回复一个。

标签: java logging io object-graph


【解决方案1】:

这远非完美,但这个问题确实值得回答。

https://github.com/EsotericSoftware/jsonbeans 是一种 完成类似事情的方法。它将任意 Java 对象(无需注释字段或任何内容)转换为 JSON,并包含一个漂亮的打印方法。它可以大约满足您的要求。

使用这个库,您可以执行以下操作:

Json json = new Json();
System.out.println(json.prettyPrint(person));

对于一些示例数据,您可能得到的输出如下所示:

{
"name": "Nate",
"age": 31,
"numbers": [
   {
      "name": "Home",
      "class": "com.example.PhoneNumber",
      "number": "206-555-1234"
   },
   {
      "name": "Work",
      "class": "com.example.PhoneNumber",
      "number": "425-555-4321"
   }
]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 2011-05-05
    • 2014-05-10
    • 1970-01-01
    • 2014-06-28
    • 2014-11-09
    相关资源
    最近更新 更多