1

このようなJSONがあります。私はそれを保存し、オブジェクト @items に読み込みました。

[
 {
  {
    "id": "A",
    "description": "a_description"
  }, 
  {
    "id": "B",
    "description": "b_description"
  }
 }, 
 {
  {
    "id": "A",
    "description": "a_description"
  }, 
  {
    "id": "B",
    "description": "b_description"
  }
 }
] 

私の目標は、2 つの列を持つテーブルを表示することです。1 つは A というラベルが付けられ、もう 1 つは B というラベルが付けられ、各行には「a_description」と「b_description」が示されます。これを行う方法がわかりません。

4

2 に答える 2

2

たぶんこのようなもの

<tr><th>A</th><th>B</th></tr>
<% @items.each do |item| %>
  <tr><td><%=item[0].description%></td><td><%=item[1].description%></td></tr>
<% end %>
于 2012-07-24T17:54:31.603 に答える
2

ああ、古いハッシュの配列と配列の問題のハッシュ。

「順不同」の問題を回避するには、まず変換する必要があります

{
  "id": "A",
  "description": "foo"
},
{
  "id": "B",
  "description": "bar"
}

{"A" : "foo", "B" : "bar" }

@new_items = @items.map do |item|
  output = {}
  item.each do |hash|
    output.merge!(hash["id"] => hash["description"])
  end
end

次に@new_itemsなります(ハッシュ要素が順序付けられていないため、意図的に順不同で表示されます)

[
  { 
    "A": "a1_description",
    "B": "b1_description"
  },
  { 
    "B": "b2_description",
    "A": "a2_description"
  }
]

そこから、各行は単なるハッシュであるため、現在の列に基づいて必要な値を逆参照することができます.

@new_items.each do |item|
  puts "#{item['A']} is paired with #{item['B']}"
end

もちろん、「A」と「B」をハードコーディングしたくない場合は、キーを動的に取得できます。.keys

于 2012-07-24T19:28:21.980 に答える