将标准JSON数组转换为2d数组对象

时间:2016-05-13 19:06:51

标签: ruby

在ruby中,我如何将这个JSON解析为2d位置数组对象?

我想将它转换为这样的简单对象:

[["Seattle"]["Washington"],["Seaton"]["Illinois"]]

我尝试过一些事情并遇到问题,而且我可以通过Google搜索找到很多这方面的例子。

{
    "data": [
        {
            "city": "Seattle",
            "state": "Washington",
            "zip": "98104",
            "country": "US",
            "empty": false,
            "county": null
        },
        {
            "city": "Seaton",
            "state": "Illinois",
            "zip": "61476",
            "country": "US",
            "empty": false,
            "county": null
        }
    ]
}

这是我到目前为止所尝试的内容(它并没有让我在那里):

require 'rubygems'
require 'json'
...
parsed = JSON.parse(string)
parsed["data"].each do |location|
  unless location["city"].nil?
    location.each do |location_item|
      puts location_item.inspect
    end
  end
end

2 个答案:

答案 0 :(得分:1)

我会做这样的事情:

require 'json'
JSON.parse(string)['data'].map { |hash| [hash['city'], hash['state']] }
#=> [["Seattle", "Washington"],["Seaton","Illinois"]]

答案 1 :(得分:1)

require 'json'

根据您的要求,

JSON.parse(str)["data"].flat_map { |h| h.values_at("city", "state") }
  #=> ["Seattle", "Washington", "Seaton", "Illinois"]

or

JSON.parse(str)["data"].map { |h| h.values_at("city", "state") }
  #=> [["Seattle", "Washington"], ["Seaton", "Illinois"]]