我从外部JSON
服务(我正在使用)获得此外部API
{
"result": {
"2332860": {
"id": 2332860,
"name": "NAME 1",
"capping": {
"quantity": 1,
"frequency": 1440
},
"status": 0,
"price": 159,
"publisher_ad_types": []
},
"2335970": {
"id": 2335970,
"name": "NAME 2",
"capping": {
"quantity": 1,
"frequency": 1440
},
"status": 0,
"price": 159,
"publisher_ad_types": []
},
"2343470": {
"id": 2343470,
"name": "NAME 3",
"capping": {
"quantity": 1,
"frequency": 1440
},
"status": 0,
"price": 170,
"publisher_ad_types": []
}
},
"request_metadata": {
"limit": 50,
"offset": 0,
"count": 11
}
}
我通过在controller
中插入代码来获得此输出:
api = HTTParty.get("https://api.external-service.com/v2/",headers: {"Authorization" => "api_token_hhs762jh97shakkaa"})
render :json => api
我想要做的是能够在自己的视图中显示每个 block 。
我该如何实现?
感谢任何帮助或提示!
答案 0 :(得分:1)
(已移动以回答格式问题。)
@api.each
将遍历顶级对象。有两个键/值对:result
和request_metadata
。我不知道为什么要直接将其转换为字符串。它是一个对象,并且您不需要它的字符串表示形式。
我不知道您的方案中@api
的类型;如果已解析,则可以在下面的代码中跳过该步骤。 (默认情况下,HTTParty下的默认值为shown in the docs,如果不是,则可以像我一样解析它。我将您的值作为字符串,解析为标准哈希(例如,不是{ 1}};我不记得HTTParty返回了什么),并开始挑选一些值作为示例。
HashWithIndifferentAccess
运行此代码将产生以下结果:
obj = JSON.parse(s)
result = obj['result']
result.each do |id, val|
id, name = val['id'], val['name']
puts "ID: #{id}"
puts "Name: #{name}"
end
在您看来,您不希望这样做,而是想要更多类似的东西(这是现成的):
ID: 2332860
Name: NAME 1
ID: 2335970
Name: NAME 2
ID: 2343470
Name: NAME 3
如果您只关心<ul>
<% result.each do |id, val| %>
<li><%= val['id'] %> - <%= val['name'] %></li>
<% end %>
</ul>
,那么这是应该向视图公开的唯一内容。如果您有一个表示该数据的域对象,则应在将其传递到视图之前对其进行转换。
请注意,我的代码未在Rails下运行,但思想完全相同。