Ruby on Rails-在视图中显示外部JSON代码

时间:2018-07-07 16:38:59

标签: json ruby-on-rails-4 view

我从外部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

我该如何实现?

感谢任何帮助或提示!

1 个答案:

答案 0 :(得分:1)

(已移动以回答格式问题。)

@api.each将遍历顶级对象。有两个键/值对:resultrequest_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下运行,但思想完全相同。

(Complete example here.)