2016-05-13 90 views
0

在ruby中,我將如何將此JSON解析爲2d位置數組對象?將標準JSON數組轉換爲2d數組對象

我想將其轉換爲一個簡單的對象是這樣的:

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

我嘗試了一些東西,有麻煩與它有沒有這個,我可以通過谷歌搜索找到很多例子。

{ 
    "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 
+0

你已經顯示了一個散列,但由於它實際上是一個字符串,所以你應該把它放在單引號中。另外,爲它指定一個變量(例如'js ='{data「:[...}'')是有幫助的,這樣讀者就可以在不需要定義變量的情況下引用變量。 –

回答

1

我會做這樣的事情:

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

謝謝,就是這樣。我無法相信這很簡單。這將需要一些習慣,因爲我不這麼認爲。 – djangofan

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