0

我正在用 Ruby 为 Puppet 写一个事实。我有一个数组

array = [[["User", "Username"], ["Date", "16.12.2014"]], [["User1", "Username1"], ["Date1", "17.12.2014"]]]

我想将其转换为 json。我尝试先将其转换为哈希,但在 Linux 中这样做

array.each do |userarr|
  winusers = Hash[userarr.map! { |pair| [pair[0], pair[1]] } ]
end

我只得到了这一 [["User1", "Username1"], ["Date1", "17.12.2014"]]对转换。这样做:

array.each do |userarr|
  winusers = Hash[userarr.map! { |pair| [pair[0], pair[1]] } ]
  winusersa << winusers
end

我得到一个哈希数组。在 Linux 上将它转换为 jsonwinusersa.to_json我得到了一个 json 格式文本数组,在 Puppet 上(事实上)我只得到了第一对转换。为什么在 Puppet 中它不起作用?如何转换该数组以使所有对格式正确?

4

3 回答 3

2

试试这个

array.flatten(1).each_slice(2).map(&:to_h)
 => [{"User"=>"Username", "Date"=>"16.12.2014"}, {"User1"=>"Username1", "Date1"=>"17.12.2014"}] 

然后,作为哈希,您可以轻松调用to_json

于 2017-02-10T15:03:10.907 回答
0

您已经以 rubyHash#[]​​ 方法可以使用的形式获得了 Array。我想你只需要这个:

% pry
[1] pry(main)> require 'json'
[2] pry(main)> a = [[["User", "Username"], ["Date", "16.12.2014"]], [["User1", "Username1"], ["Date1", "17.12.2014"]]]
[3] pry(main)> puts JSON.pretty_generate(a.map { |e| Hash[e] })
[
  {
    "User": "Username",
    "Date": "16.12.2014"
  },
  {
    "User1": "Username1",
    "Date1": "17.12.2014"
  }
]
于 2018-10-18T23:02:36.373 回答
0

需要'facter' #如果你有facter作为gem在本地测试需要'json'

array = [
    [
        ["User", "Username"],
        ["Date", "16.12.2014"]
    ],
    [
        ["User1", "Username1"],
        ["Date1", "17.12.2014"]
    ]
]

put JSON.pretty_generate(JSON.parse(array.to_json))
于 2018-10-18T21:36:14.457 回答