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

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

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

有什么建议吗?


当前回答

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

require "awesome_print"
AwesomePrint.pry!

其他回答

使用纯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"
    ]
  }
}

在Rails中,Ruby中的数组和哈希有内置的to_json函数。我会使用JSON,因为它在web浏览器中是非常可读的,例如谷歌Chrome。

也就是说,如果你担心它看起来太“科技”,你可能应该写自己的函数,用空格和其他字符替换散列和数组中的花括号和方括号。

在gsub函数中找到一个很好的方法。继续使用不同的字符和不同数量的空白,直到你找到一些看起来有吸引力的东西。http://ruby-doc.org/core-1.9.3/String.html#method-i-gsub

在我尝试的所有宝石中,show_data宝石对我来说工作得最好,我现在广泛地使用它来记录Rails中的参数散列

require 'pp'
pp my_hash

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

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

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

require "awesome_print"
AwesomePrint.pry!