我有一个大哈希嵌套数组和哈希。我想简单地打印出来,所以它'可读'的用户。

我希望它有点像to_yaml -这是相当可读的-但仍然太高科技看起来。

最终需要读取这些数据块的将是最终用户,因此它们需要被清晰地格式化。

有什么建议吗?


当前回答

require 'pp'
pp my_hash

如果你需要一个内置的解决方案,只是想要合理的换行,可以使用pp。

如果可以安装gem,请使用awesome_print。(取决于你的用户,你可能希望使用index:false选项来关闭显示数组下标。)

其他回答

如果要打印给用户,请使用上面的答案。

如果你只想在控制台为自己打印,我建议使用撬宝石而不是irb。除了漂亮的印刷,撬还有很多其他功能(查看下面的railscast)

宝石安装撬

看看这个铁路广播:

http://railscasts.com/episodes/280-pry-with-rails

使用Pry,你只需要添加以下代码到你的~/.pryrc:

require "awesome_print"
AwesomePrint.pry!

如果你有JSON,我推荐JSON.pretty_generate(散列),因为它比awesome_print更简单,在pre标签中看起来很棒,并且允许轻松地从网页复制。(请参见:如何在Ruby on Rails中“漂亮”地格式化JSON输出?)

使用纯Ruby的漂亮打印散列(没有宝石)

我看到这个帖子是为了自己解决这个问题。

我有一个大的哈希,我想让漂亮,但我需要保持在ruby哈希符号,而不是JSON。

这是代码+示例

使用pretty_generate来获得格式化好的JSON字符串。 将所有JSON键替换为symbol: equivalent

puts JSON.pretty_generate(result)
         .gsub(/(?:\"|\')(?<key>[^"]*)(?:\"|\')(?=:)(?:\:)/) { |_|
              "#{Regexp.last_match(:key)}:"
          }

示例JSON

{
  "extensions": {
    "heading": "extensions",
    "take": "all",
    "array_columns": [
      "name"
    ]
  },
  "tables": {
    "heading": "tables",
    "take": "all",
    "array_columns": [
      "name"
    ]
  },
  "foreign_keys": {
    "heading": "foreign_keys",
    "take": "all",
    "array_columns": [
      "name"
    ]
  },
  "all_indexes": {
    "heading": "all_indexes",
    "take": "all",
    "array_columns": [
      "name"
    ]
  },
  "keys": {
    "heading": "keys",
    "take": "all",
    "array_columns": [
      "name"
    ]
  }
}

Ruby哈希示例

{
  extensions: {
    heading: "extensions",
    take: "all",
    array_columns: [
      "name"
    ]
  },
  tables: {
    heading: "tables",
    take: "all",
    array_columns: [
      "name"
    ]
  },
  foreign_keys: {
    heading: "foreign_keys",
    take: "all",
    array_columns: [
      "name"
    ]
  },
  all_indexes: {
    heading: "all_indexes",
    take: "all",
    array_columns: [
      "name"
    ]
  },
  keys: {
    heading: "keys",
    take: "all",
    array_columns: [
      "name"
    ]
  }
}
require 'pp'
pp my_hash

如果你需要一个内置的解决方案,只是想要合理的换行,可以使用pp。

如果可以安装gem,请使用awesome_print。(取决于你的用户,你可能希望使用index:false选项来关闭显示数组下标。)