如何正确地将JSON解析为可用的输出(Ruby on Rails)

时间:2015-07-08 15:36:06

标签: ruby-on-rails json xml formatting

我正在使用我用以下内容调用的API:

控制器:

@bounces = SendgridToolkit::Bounces.new(API_USERNAME, API_PASSWORD)

查看:

并返回如下数据:(对于JSON,尽管也可以进行XML调用)

[{"status"=>"550", "created"=>2015-07-06 18:37:38 UTC, "reason"=>"550 Unrouteable address ", "email"=>"jake@fake.com"}]

这对我很有用,但不幸的是,这不是我想在Rails应用程序中呈现它的方式。什么是转换这些数据的最佳方式,因为我无法访问格式不正确的字符串本身,只有从我与之交互的应用程序请求它的代码?

我在向Google提出正确的问题时遇到了一些问题,并且非常感谢您从经验中提出的任何建议。

提前感谢您的帮助!

修改

例如,无论我把它放在哪里(视图或控制器),都会返回错误,说字符串是未定义的方法:

 string = '[{"status":"550","reason":"550 Unrouteable address ","email":"jake@fake.com"}]'
    @showbounces = @bounces.retrieve.to_json JSON.parse(string)
    @newsletters = Newsletter.all

返回:

no implicit conversion of Symbol into Integer:

@showbounces = @bounces.retrieve.to_json JSON.parse(string)

最终,我想从JSON / XML中提取选择信息,并将其用于我的视图中的图形,我可以使用CSS和HTML格式化。

1 个答案:

答案 0 :(得分:1)

您无需从Web服务解析JSON输出字符串。 SendgridToolkit宝石会照顾到这一点。它将数据作为Ruby对象(数组和/或哈希)返回,准备在代码中使用。

例如,在您的控制器中:

def index
  bounces = SendgridToolkit::Bounces.new(API_USERNAME, API_PASSWORD)
  @all_bounces = bounces.retrieve
end

然后在你看来:

<ul>
  <% @all_bounces.each do |bounce| %>
    <li>Bounced <%= bounce['email'] %> (<%= bounce['reason'] %>)</li>
  <% end %>
</ul>