【问题标题】:handling a webservice responce with ror使用 ror 处理 Web 服务响应
【发布时间】:2017-04-11 22:18:26
【问题描述】:

我正在使用 Rails 应用程序中的 Web 服务收集响应

response = #api.sql_data    

这会导致response 等于以下内容。

response
  #=> { "success"=>true, "totalcount"=>10, "rows"=>[
  #     { "ID"=>"0001", "CODE"=>"0000001", "CODE_1"=>"Alpha",
  #       "NAME"=>"Alpha", "Balance"=>"0" },
  #     { "ID"=>"0002", "CODE"=>"0000002", "CODE_1"=>"Beta",
  #       "NAME"=>"Beta", "Balance"=>"0" },
  #     { "ID"=>"0003", "CODE"=>"0000003", "CODE_1"=>"Charlie",
  #       "NAME"=>"Charlie", "Balance"=>"0"},
  #     ...
  #     ]
  #   }

我创建了以下方法:

def format_response(response)   
  response['rows'].map do |row|
    { id: row[0],
      code: row[1],
      code1: row[2],
      balance: row[4] }   
  end.uniq { |x| x[:code1] }
end

当我对response 的上述值执行此方法时,我得到以下内容。

format_response(response)
  #=> [{:id=>nil, :code=>nil, :code1=>nil, :balance=>nil}] 

这是不正确的。我希望这个表达式返回以下内容。

{"ID"=>"0001", "CODE"=>"0000001", "CODE_1"=>"Alpha", "NAME"=>"Alpha", "Balance"=>"0"}

我的错误是什么?

【问题讨论】:

  • HaCos,我相信我的编辑并没有改变您的问题。如果确实如此,请接受我的道歉并编辑我的编辑或回滚到您的原始问题。 (点击“已编辑”,弹出回滚选项。)

标签: ruby-on-rails ruby web-services api


【解决方案1】:

response['rows'] 包含一个哈希数组。 ruby 中的哈希不是关联数组,因此您无法通过hash[0] 获取第一个键。

def format_response(response)   
  response['rows'].map do |row|
    {   
      id: row["ID"],
      code: row["CODE"],
      code_1: row["CODE_1"],
      balance: row["BALANCE"] 
    }   
  end.uniq { |x| x[:code1] }
end

【讨论】:

    【解决方案2】:

    每一行都是一个哈希,因此您需要按名称而不是索引访问其元素(就像使用数组一样)。以下应该有效:

    def format_response(response)   
      formatted_response = response['rows'].map do |row|
        { id: row['ID'],
          code: row['CODE'],
          code1: row['CODE_1'],
          balance: row['balance'] }   
      end
      formatted_response.uniq { |x| x[:code1] }
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多