2012-09-29 65 views
-1

我有以下變量(從JSON對象解析)我可以用Ruby清理這個過度嵌套的JSON嗎?

testdata = { 
"file_data"=>[ 
    {"id"=>"idvalue","desc"=>[ 
    {"key"=>"value"} 
    ]} 
] 
} 

只有一個FILEDATA,但不是用哈希開始,它包住其散列在陣列中。但是這種瘋狂並沒有結束:desc鍵應該包含一個散列,但是它包含一個包含散列的單對象數組。

因此,要獲得任何數據出來,我寫的東西像

puts testdata["file_data"][0]["desc"][0]["key"] 

我能做些什麼這多餘的拼圖?

+2

爲什麼不使用你上述建議是什麼? – sawa

+0

除了醜陋之外,這種多餘的包裝讓它更難使用像Hashie :: Mash之類的東西。 –

回答

1

你可以做這樣的事情:

def clean h 
    Hash[h.map{|k,v| 
    [k, 
    case v 
     when Hash then clean(v) 
     when Array then clean(v.first) 
     else v 
    end 
    ] 
    }]  
end 

clean testdata 
#=> {"file_data"=>{"id"=>"idvalue", "desc"=>{"key"=>"value"}}} 
+0

當然,遞歸清理方法就是我想的,但如果數據包含具有實際值的數組呢?例子:'{「file_data」=> [{「id」=>「idvalue」,「desc」=> [{「key」=> [1,2]}]}]}'這段特殊的代碼會拋出一個在這種情況下的錯誤。 –

+0

你將不得不更確切地定義在哪種情況下會發生什麼。 –