2017-06-15 78 views
1

我有一個JSON對象數組。如何獲取JSON中對象數組的某些屬性

arr = [{'a'=> 1, 'b'=> 2, 'c'=> 3}, {'a'=> 4, 'b'=> 5,'c'=> 6}, {'a'=> 4, 'b'=> 5,'c'=> 6}] 

但我希望有一個新的陣列,選擇「a」和「C」只有屬性:

new_arr = [{'a'=> 1, 'c'=> 3}, {'a'=> 4,'c'=> 6}, {'a'=> 4,'c'=> 6}] 

我嘗試使用地圖,1個屬性只arr.map{|i| i['a']}。 我缺少什麼或有什麼建議?

回答

5

利用slice並傳遞要選擇

arr = [{'a'=> 1, 'b'=> 2, 'c'=> 3}, {'a'=> 4, 'b'=> 5,'c'=> 6}, {'a'=> 4, 'b'=> 5,'c'=> 6}] 

arr.map{|a| a.slice('a', 'c')} 
#=> [{"a"=>1, "c"=>3}, {"a"=>4, "c"=>6}, {"a"=>4, "c"=>6}] 
3

的屬性可以使用except

new_arr = arr.map{ |e| e.except('b') } 
+1

唯一的缺點是,如果有'{'d'=> 5}',那麼在這種情況下你也會得到這個 –

+0

,它應該是'e.except('b','d')' –

3

因爲,已經有答案描述的sliceexcept使用,我會提供另一種方式是:

arr.map{|h| {'a' => h['a'], 'c' => h['c'] } } 
#=> [{"a"=>1, "c"=>3}, {"a"=>4, "c"=>6}, {"a"=>4, "c"=>6}] 

請注意,h這裏是map,這是一個Hash內迭代的數組的一個特定對象。

需要鍵入更多的代碼。你也可以使用select

+2

' ar'應該是'h',這些是散列,而不是數組。 – Stefan

+0

@Stefan:編輯更清晰 – Surya

相關問題