如何获取JSON中对象数组的某些属性

问题描述:

我有一个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']}。 我缺少什么或有什么建议?

利用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}] 

的属性可以使用except

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

唯一的缺点是,如果有'{'d'=> 5}',那么在这种情况下你也会得到这个 –

+0

,它应该是'e.except('b','d')' –

因为,已经有答案描述的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