如何根据 REST API 对象中的值对返回的对象进行分组?
How do I group objects returned by a REST API based on a value inside that object?
我是 ruby/rails 的新手,请多多包涵。
我正在尝试获取由 JIRA rest API 编辑的结果 return 并将它们呈现在视图中。我可以使用 jira-ruby gem 轻松做到这一点。我遇到的问题是通过 return 对象内部的特定对象对结果进行分组 API (在这种情况下, "components" 字段对象内部 "issue" 目的)。我试图为此使用 group_by 和块,但我基本上得到了我想要的相反的结果。两种方法 return 结果相同。
在我的控制器中我有:
@issues = @jira_client.Issue.all
在我看来我有:
<% @issues.chunk {|issue_comp| issue_comp.fields["components"]}.each do |comps, issues| %>
<h2>
<% comps.each do |comp| %>
<%= comp["name"] %>
<% end %>
</h2>
<ul>
<% issues.each do |issue| %>
<li><p><%= link_to issue.key, "http://localhost:2990/jira/browse/#{issue.key}" %> - <%= issue.summary %></p></li>
<% end %>
</ul>
<% end %>
我最后得到的是:
CompA CompB
- 问题A
CompCCompD
- 问题B
CompA CompC CompD
- 问题C
等等
我想要的是:
CompA
- 问题A
- 问题C
CompB
- 问题A
CompC
- 问题B
- 问题C
CompD
- 问题B
- 问题C
由 API 编辑的对象 return 是一个非常复杂的对象(即散列内部数组中的巨大散列数组)。所以,我必须深入挖掘才能找到组件名称。
我觉得这不应该像看起来那么复杂,但我有一个糟糕的习惯,就是让事情变得比他们需要的更复杂。我在这里做错了什么?
编辑: 我创建了一个完整转储的要点,该转储是 return 使用上述调用编辑的。注意 "components" 数组:
我查看了您从 Jira 返回的数据。在我看来是这样的:
- 有一个 Jira 问题的外部数组。
- 每个问题都有一个 "attrs" 散列
- 每个 "attrs" 散列包含组件。
如果这种理解是正确的,我认为您正在尝试反转该结构,以便您可以获得完整的组件列表,然后遍历每个组件,并显示属于该组件的问题。
如果这种理解是正确的,您有两个基本选择:
- 检查您是否可以向 Jira 询问该信息(这样您就不必自己生成),或者
- 构建您自己的数据结构(根据您的喜好在内存中或本地数据库中):
构建有用结构的示例代码in-memory:
# in a controller, model, or service class (as you wish)
@components = {}
@jira_issues_array.each do |jira_issue| # from your API call
jira_issues[:components].each do |jira_component|
@components[jira_component[:key]] ||= { name: jira_component[:name], issue_keys: [] }
@components[jira_component[:key]][:issue_keys] << jira_issue[:key]
end
end
在您看来,您可以像这样迭代@components:
# some html.erb file:
<h1>Components and Issues</h1>
<ul>
<% @components.keys.each do |component_key, component| %>
<li><%= component[:name] %>
<ul> <!-- nested -->
<% component[:issue_keys].each do |issue_key| %>
<%= @jira_issues_array.find { |issue| issue[:key] == issue_key }[:name] %>
<% end %>
</ul>
</li>
<% end %>
</ul>
注意:就像一个典型的懒惰程序员一样,我还没有尝试过这个,但它确实是为了向您展示如何去做。例如,每个问题的名称都嵌入在 attrs 部分,因此您需要稍微挖掘一下。
最后,如果有人觉得这有用,我会使用 this to analyse and reformat JSON。
HTH - 如有任何疑问或问题,post 发表评论。
我是 ruby/rails 的新手,请多多包涵。
我正在尝试获取由 JIRA rest API 编辑的结果 return 并将它们呈现在视图中。我可以使用 jira-ruby gem 轻松做到这一点。我遇到的问题是通过 return 对象内部的特定对象对结果进行分组 API (在这种情况下, "components" 字段对象内部 "issue" 目的)。我试图为此使用 group_by 和块,但我基本上得到了我想要的相反的结果。两种方法 return 结果相同。
在我的控制器中我有:
@issues = @jira_client.Issue.all
在我看来我有:
<% @issues.chunk {|issue_comp| issue_comp.fields["components"]}.each do |comps, issues| %>
<h2>
<% comps.each do |comp| %>
<%= comp["name"] %>
<% end %>
</h2>
<ul>
<% issues.each do |issue| %>
<li><p><%= link_to issue.key, "http://localhost:2990/jira/browse/#{issue.key}" %> - <%= issue.summary %></p></li>
<% end %>
</ul>
<% end %>
我最后得到的是:
CompA CompB
- 问题A
CompCCompD
- 问题B
CompA CompC CompD
- 问题C
等等
我想要的是:
CompA
- 问题A
- 问题C
CompB
- 问题A
CompC
- 问题B
- 问题C
CompD
- 问题B
- 问题C
由 API 编辑的对象 return 是一个非常复杂的对象(即散列内部数组中的巨大散列数组)。所以,我必须深入挖掘才能找到组件名称。
我觉得这不应该像看起来那么复杂,但我有一个糟糕的习惯,就是让事情变得比他们需要的更复杂。我在这里做错了什么?
编辑: 我创建了一个完整转储的要点,该转储是 return 使用上述调用编辑的。注意 "components" 数组:
我查看了您从 Jira 返回的数据。在我看来是这样的:
- 有一个 Jira 问题的外部数组。
- 每个问题都有一个 "attrs" 散列
- 每个 "attrs" 散列包含组件。
如果这种理解是正确的,我认为您正在尝试反转该结构,以便您可以获得完整的组件列表,然后遍历每个组件,并显示属于该组件的问题。
如果这种理解是正确的,您有两个基本选择:
- 检查您是否可以向 Jira 询问该信息(这样您就不必自己生成),或者
- 构建您自己的数据结构(根据您的喜好在内存中或本地数据库中):
构建有用结构的示例代码in-memory:
# in a controller, model, or service class (as you wish)
@components = {}
@jira_issues_array.each do |jira_issue| # from your API call
jira_issues[:components].each do |jira_component|
@components[jira_component[:key]] ||= { name: jira_component[:name], issue_keys: [] }
@components[jira_component[:key]][:issue_keys] << jira_issue[:key]
end
end
在您看来,您可以像这样迭代@components:
# some html.erb file:
<h1>Components and Issues</h1>
<ul>
<% @components.keys.each do |component_key, component| %>
<li><%= component[:name] %>
<ul> <!-- nested -->
<% component[:issue_keys].each do |issue_key| %>
<%= @jira_issues_array.find { |issue| issue[:key] == issue_key }[:name] %>
<% end %>
</ul>
</li>
<% end %>
</ul>
注意:就像一个典型的懒惰程序员一样,我还没有尝试过这个,但它确实是为了向您展示如何去做。例如,每个问题的名称都嵌入在 attrs 部分,因此您需要稍微挖掘一下。
最后,如果有人觉得这有用,我会使用 this to analyse and reformat JSON。
HTH - 如有任何疑问或问题,post 发表评论。