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 对:resultrequest_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,但是思路是完全一样的

(Complete example here.)