【问题标题】:Parse JSON to an Array in Rails在 Rails 中将 JSON 解析为数组
【发布时间】:2016-07-27 11:15:24
【问题描述】:

我正在为执行 SQL 查询的方法编写测试。对于这个项目,他们需要响应为 JSON。我的测试是查看查询返回预期的响应数。我遇到了障碍,因为我的对象是 JSON 而不是数组。如何将 JSON 转换为 ARRAY?

  test "works" do
    report = get :method
    assert_equal 1, report.count
  end

NoMethodError: 未定义的方法 `count'...

我尝试添加array_report = ActiveSupport::JSON.decode(report),但收到以下错误消息。

TypeError: ActionController::TestResponse 没有隐式转换 成字符串

如何正确解析 JSON?

编辑

  def method
    sql = "SELECT MIN(departure_date), ch_invoice.invoice_id
    FROM ch_invoice
    INNER JOIN ch_trip
    ON ch_invoice.invoice_id = ch_trip.invoice_id
    WHERE departure_date < SYSDATE
    AND service_rendered = 0
    AND paid = 1
    Group By ch_invoice.invoice_id"

    report = ActiveRecord::Base.connection.exec_query(sql)
    render json: report
  end

编辑 2

示例 JSON.parse 代码。这就是查询给我的。

{"min(departure_date)"=>"2015-03-01T00:00:00.000Z", "invoice_id"=>"123catfood"}
{"min(departure_date)"=>"2015-01-01T00:00:00.000Z", "invoice_id"=>"123dogfood"}

【问题讨论】:

    标签: arrays ruby json unit-testing ruby-on-rails-4


    【解决方案1】:

    JSON.parse &lt;string&gt; 可能是您需要的。它可能看起来像这样:

    test "works" do
      get :method
    
      result = JSON.parse(response.body)
    
      assert_equal 1, result.count
    end
    

    查看“How to unit-test a JSON controller?”和ActiveSupport JSON documention。

    【讨论】:

    • 这给了我查询中每个单元格的计数。所以“Bugs”“Bunny”是 2,当我希望它是一行数据时。关于如何解决这个问题的想法?
    • 您能否发布一个示例 JSON.parse(response.body) 以便我可以看到我们正在处理的内容?
    • 您的代码是正确的。我才意识到我打错了东西。我原本希望只从我的工厂获取我的样本数据,但我实际上是在冲入我的数据库并提取数据。那不是布埃诺。
    • 啊,好吧。凉爽的。 :-)
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 2011-07-02
    • 2012-05-09
    • 1970-01-01
    • 2017-06-24
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多