Ruby on Rails - 在视图中显示外部 JSON 代码
Ruby on Rails - Show external JSON code in view
我从外部 API
服务(我正在使用)获得此外部 JSON
{
"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
我想要做的是能够在我的视图中显示每个 块。
我怎样才能做到这一点?
如有任何帮助或提示,我们将不胜感激!
(移至回答格式问题。)
@api.each
将遍历顶级对象。有两个 key/value 对:result
和 request_metadata
。我不知道您为什么要将它直接转换为字符串;它是一个对象,您不需要它的字符串表示形式。
我不知道你的场景中 @api
的类型;如果已经解析,则可以在下面的代码中跳过该步骤。 (在 HTTParty 下应该默认为 shown in the docs,如果不是,你可以像我一样解析它。我把你的值作为一个字符串,解析成一个标准的哈希(例如,不是 HashWithIndifferentAccess
; 我不记得什么是 HTTParty returns),并开始挑选一些值作为示例。
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>
如果您只关心 result
那么那是唯一应该暴露给视图的东西。如果您有表示此数据的域对象,则应在将其传递给视图之前对其进行转换。
注意我的代码不是运行下的Rails,但是思路是完全一样的
我从外部 API
服务(我正在使用)获得此外部 JSON
{
"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
我想要做的是能够在我的视图中显示每个 块。
我怎样才能做到这一点?
如有任何帮助或提示,我们将不胜感激!
(移至回答格式问题。)
@api.each
将遍历顶级对象。有两个 key/value 对:result
和 request_metadata
。我不知道您为什么要将它直接转换为字符串;它是一个对象,您不需要它的字符串表示形式。
我不知道你的场景中 @api
的类型;如果已经解析,则可以在下面的代码中跳过该步骤。 (在 HTTParty 下应该默认为 shown in the docs,如果不是,你可以像我一样解析它。我把你的值作为一个字符串,解析成一个标准的哈希(例如,不是 HashWithIndifferentAccess
; 我不记得什么是 HTTParty returns),并开始挑选一些值作为示例。
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>
如果您只关心 result
那么那是唯一应该暴露给视图的东西。如果您有表示此数据的域对象,则应在将其传递给视图之前对其进行转换。
注意我的代码不是运行下的Rails,但是思路是完全一样的