【问题标题】:Ruby: how to generate a json output with braces (brackets, parentheses, curlies) in a new lineRuby:如何在新行中生成带有大括号(方括号、括号、花括号)的 json 输出
【发布时间】:2016-07-17 09:14:21
【问题描述】:

对于参考文件比较需要生成 json 文件的可能性,其中大括号总是从新行开始。

例如,json 哈希:

my_json = {"Key" => {"Key" => "Value"}}

的召唤之后领先
JSON.pretty_generate(my_json)

{
  "Key": {
    "Key": "Value"
  }
}

但不幸的是,我需要这样的输出:

{
  "Key": 
  {
    "Key": "Value"
  }
}

在不破坏漂亮格式的情况下使用 ruby​​ 有什么办法吗?

谢谢

【问题讨论】:

  • 我很好奇你为什么需要那个特定的输出,它们都是有效的 JSON(当然{"Key":{"Key":"Value"}} 也是如此)。
  • 您是否阅读过pretty_generate 的文档,上面写着要阅读the generate documentation 以获得选项?您是否尝试过这些选项?你试过什么?
  • 我尝试了 :space=> "\n" 和 :indent=>"\t" 的组合,但这并不能解决问题,它甚至会破坏格式。我不想在每个“:”之后有一个新行......就在大括号之后,仍然保持漂亮的格式
  • i second mu is too short 的评论。不试图最小化您的问题,但放置 { 因为它是 JSON 和无论它们是否在新行上或文件是否是有效 JSON 之间不应该有区别!
  • 好的,但是我工作的测试环境在我生成的 json 文件和其他地方生成的参考文件之间进行了简单的文本比较......所以参考文件中的附加新行可能会导致负面的差异结果。

标签: ruby json pretty-print braces


【解决方案1】:

如果你想要这种输出差异,你为什么不强迫它呢?根据我的评论:

更新以涵盖{[ 括号

my_json = {"Keys" => [{"Key" => "Value"},{"key1" => "val2"}], "newkey" => {"nk1" => "val3"}}

puts JSON::pretty_generate(my_json).gsub(
           /^(.*)(\"[^\"]+\"): ([\{\[])/, #first brackets: white space. Second: Key, Third: Bracket
           "\\1\\2:\n\\1\\3")             #\\1: white space (on both lines), \\2: Key, \\3: Brac[e|ket]

{
  "Keys":
  [
    {
      "Key": "Value"
    },
    {
      "key1": "val2"
    }
  ],
  "newkey":
  {
    "nk1": "val3"
  }
}

【讨论】:

  • 这是一个很好的方法,谢谢。但是您能否编辑您的评论以使用“[”大括号...在我的测试中,它们不会从新行开始。
猜你喜欢
  • 1970-01-01
  • 2021-01-11
  • 2011-01-12
  • 2011-09-26
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
相关资源
最近更新 更多