迭代json响应并返回一个数组

时间:2016-10-03 11:48:07

标签: json ruby

下面的代码将所有县作为字符串返回给我,我可以通过使用inspect方法看到它。

def self.all_counties
    response['ChargeDevice'].each do |charger|
        puts ['ChargeDeviceLocation']['Address']['County'].inspect
    end
end

将每个返回的字符串存储在一个数组中的正确方法是什么,以便我以后可以操作它?

JSON

"ChargeDeviceLocation"   =>   {  
  "Latitude"      =>"51.605591",
  "Longitude"      =>"-0.339510",
  "Address"      =>      { 
     "County"         =>"Greater London",
     "Country"         =>"gb"
  }

1 个答案:

答案 0 :(得分:2)

如果响应包含每个项目的所有键,则此方法有效:

counties = response['ChargeDevice'].map do |r|
  r.dig('ChargeDeviceLocation', 'Address', 'County')
end

当树没有所有项目的条目时,这样的东西会给你nils:

counties = response['ChargeDevice'].map do |r|
  r.fetch('ChargeDeviceLocation', {}).
    fetch('Address', {}).
    fetch('County', nil)
end

您还可以使用JSONPath(和ruby JSONPath gem)。

require 'jsonpath'
counties = JsonPath.new('$..County').on(response.to_json)