【问题标题】:Converting array to json in Ruby (Puppet, facter)在Ruby中将数组转换为json(Puppet,facter)
【发布时间】:2017-02-10 14:52:07
【问题描述】:

我正在用 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 上将其覆盖为 json winusersa.to_json 我得到了一组 json 格式的文本,在 Puppet 上(事实上)我只得到了第一对转换。为什么在 Puppet 中它不起作用?如何转换该数组以使所有对格式正确?

【问题讨论】:

    标签: arrays json ruby puppet facter


    【解决方案1】:

    试试这个

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

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

    【讨论】:

      【解决方案2】:

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

      % 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"
        }
      ]
      

      【讨论】:

        【解决方案3】:

        Require '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))
        

        【讨论】: