【问题标题】:How to get certain attributes of an array of objects in JSON如何在 JSON 中获取对象数组的某些属性
【发布时间】:2017-06-15 09:38:01
【问题描述】:

我有一个 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}]

我尝试使用 map 但仅用于 1 个属性 arr.map{|i| i['a']}。 我缺少什么或有什么建议?

【问题讨论】:

    标签: ruby-on-rails arrays json ruby


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以使用except

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

      【讨论】:

      • 唯一的缺点是如果有{'d' => 5}你也会得到它
      • 在这种情况下,应该是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

      【讨论】:

      • ar 应该是 h,这些是哈希值,而不是数组。
      • @Stefan :为更清晰而编辑
      猜你喜欢
      • 1970-01-01
      • 2011-07-20
      • 2019-06-22
      • 1970-01-01
      • 2011-10-16
      • 2022-11-22
      • 2022-03-17
      • 2019-02-08
      • 1970-01-01
      相关资源
      最近更新 更多