2012-09-07 175 views
0

我有一個哈希值,@data尋找類似以下內容:紅寶石路徑嵌套哈希

{ 
    "calcData" => { 
     "coverStartDate"  =>"10/08/2011", 
     ... 
     "part"=>  [ 
     { 
      "licenceYears"   =>"10", 
      "licenceType"   =>"1", 

      ... 

      "@partname"   =>"ratingData" 
     }, 
     {     
      "dob"   =>"26/01/1964", 
      "age"   =>"47", 

      ... 

      "@partname"   =>"driver" 
     }, 

     ... 
     ] 
    } 
} 

裏有part位與差異@partname小號各種多個部分。

什麼是選擇這些@partname位的一個最好的辦法:

例如爲:

@data["calcData"]["part <<< where @partname="ratingData" >>> "]["licenceYears"] 

我怎麼能代表的Ruby/Rails這樣的邏輯?

+0

-1你的數據不是有效的Ruby對象。你有一個額外的數組打開'['和一個額外的散列關閉'}'。此外,相關的鍵應該是「」部分「,而不是」你所隱含的「」部分「,」例如「。 – sawa

+0

@sawa我已經在很大程度上修改了實際的散列。這些只是一個錯別字 - 我更感興趣的是如何解決這個問題 - 我編輯了這篇文章以使其有效。 – Harry

回答

2
query = 'driver' 

@data["calcData"]['part'].select{|part| part['@partname'].eql?query} 
=> [{"dob"=>"26/01/1964", "age"=>"47", "@partname"=>"driver"}] 
0

這裏有一個辦法:

part = @data["calcData"]["part"] 
keys = part.keys.select{|key| part["@partname"] == "ratingData"} 
values = keys.collect{|key| part[key]["licenceYears"]} 

您可以將它變成一個襯墊,但它不是那麼容易閱讀。

0

使用結構。

CalcData = Struct.new :coverStarDate, :part 
calc_data = CalcData[ "10/08/2011", 
         { "licenceYears" => 10, 
         # etc. 
         } ] 

就這樣你擺脫頂級支架參考的自己,廣告,你就可以說:

calc_data.part["licenceYears"]