我如何遍历一系列哈希并形成新的哈希

时间:2020-06-12 12:43:49

标签: ruby loops

我打电话给Companies House API,从API得到的响应是一系列哈希。

companies = {
 "total_results" => 2, 
 "items" => [{
  "title" => "First company",
  "date_of_creation" => "2016-11-09",
  "company_type" => "ltd",
  "company_number" => "10471071323",
  "company_status" => "active"
 }, 
 {
  "title" => "Second company",
  "date_of_creation" => "2016-11-09",
  "company_type" => "ltd",
  "company_number" => "1047107132",
  "company_status" => "active"
 }]
}

我如何遍历公司并获得类似于以下内容的结果:

[{
  title: "First company",
  company_number: "10471071323"
},
{
  title: "Second company",
  company_number: "1047107132"
}]

3 个答案:

答案 0 :(得分:1)

您可以使用map来遍历数组中的元素并返回一个新数组:

companies["items"].map do |c| 
  {
    title: c['title'],
    company_number: c['company_number'] 
  }
end
 => [
  {:title=>"First company", :company_number=>"10471071323"},
  {:title=>"Second company", :company_number=>"1047107132"}
] 

答案 1 :(得分:0)

companies.map { |company| company.slice('title', 'company_number').symbolize_keys }

这应该可以解决问题。

如果您不使用Rails(或更具体地说,不是ActiveSupport),那么symbolize_keys将不可用。在这种情况下,您将不得不采用更标准的Ruby方法:

companies.map do |company|
  { title: company["title"], company_number: company["company_number"] }
end

答案 2 :(得分:0)

答案是完全正确的;但是您应该意识到,您在公司内部所看到的不仅仅是一系列哈希,而且是有效的JsonApi响应。

如果您使用的是了解JsonApi规范的gem,或者只是将其作为此类数据使用,您可能会发现工作更轻松。

看看https://jsonapi.org/implementations/的ruby实现

或使用ActiveModelSerializer,不仅可以重新构造哈希,还可以将非常结构化的数据反序列化为ruby对象。

但是就像我说的那样,如果您要寻找的只是一种快速的方法来按照您描述的方式对数据进行重组。以上答案是完美的。