2016-10-03 2 views
0

아래 코드는 모든 카운티를 문자열로 반환하며, inspect 메소드를 사용하여이를 볼 수 있습니다.json 응답을 반복하고 하나의 배열을 반환하십시오.

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" 
    } 
+3

'each' 대신'map'을 사용하고 결과를 변수에 저장하십시오. – ndn

+0

'[]]를 반복하지 않고 ['Hash # dig'] (http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig)를 사용하면 도움이됩니다. 호출을 사용하여'nil' 오류를 피할 수 있습니다. –

+0

예 :'charger.dig ('ChargeDeviceLocation', 'Address', 'County') ' –

답변

2

:

이 나무가 모든 항목에 대한 항목이 당신에게 줄 것이다 NILS 같은
counties = response['ChargeDevice'].map do |r| 
    r.dig('ChargeDeviceLocation', 'Address', 'County') 
end 

뭔가가 없습니다 :

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) 
+0

JSONPath 보석에 Kimmo님께 감사드립니다. 나는 내가 원하는 것을 얻었다. – user5922898

관련 문제