【问题标题】:How to properly parse JSON into usable output (Ruby on Rails)如何正确地将 JSON 解析为可用的输出(Ruby on Rails)
【发布时间】:2015-07-08 15:36:05
【问题描述】:

我正在使用这样的 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 格式化的图形之类的东西。

【问题讨论】:

  • 好的,得到的问题多于答案。首先,你在哪里调用 API?我假设retrieve_with_timestamps 拨打电话?现在,你怎么知道返回的是一个实际的字符串而不是一个哈希数组?您的编辑部分也是一个谜 - 如果您定义了字符串变量,为什么您希望它能够工作?
  • @BroiStatse 抱歉,我对在 Rails 中使用 API 完全陌生,事实上,在整个 Rails 中。我编辑了问题以显示我现在放在那里的内容。我虽然 string 已经在 Ruby 中定义(因此为什么 .to_s 有效),我想我发现的资源的措辞让我有点困惑。我很抱歉。

标签: ruby-on-rails json xml formatting


【解决方案1】:

您无需解析来自 Web 服务的 JSON 输出字符串。 SendgridToolkit gem 可以解决这个问题。它将数据作为 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>

【讨论】:

  • 那是我的问题哈哈哈哈。现在的问题是当&lt;%= @all_bounces %&gt; 返回[{"status"=&gt;"550", "reason"=&gt;"550 Unrouteable address ", "email"=&gt;"jake@fake.com"}] 时返回Bounced ()
  • 没关系,它是通过将emailreason 作为字符串而不是键传递来修复的(我相信该术语至少对于我要描述的内容是正确的)。我需要将您的代码更改为类似于&lt;%= bounce["email"] %&gt; 而不是&lt;%= bounce[:email] %&gt;。请编辑您的答案,我会立即将其标记为已接受!感谢您的洞察力!
  • 我也遇到了SendgridToolkit::Statistics 的问题,说我的“delievered”和“bounces”等都是 0,但我知道这是错误的。你有这方面的经验吗?我讨厌所有这些信息都没用
  • 我编辑了答案以使用字符串而不是符号作为 bounce 哈希。感谢您纠正我的错误。 ;)
  • 对于您的统计问题,如果没有更多信息,很难判断。如果您有不同的用于开发和生产的用户名和密钥,请仔细检查您的 API 用户名和密钥。可能是供应商方面有延迟……(我还没有真正使用过。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多