【问题标题】:Ruby on Rails - Combine several JSONs from api callRuby on Rails - 组合来自 api 调用的多个 JSON
【发布时间】:2018-12-07 12:34:39
【问题描述】:

在我的应用程序中,我需要对客户端进行 API 调用以获取有关产品的信息(我通过提供 product_id 来实现)。

他们的 API 一次只允许 1 个ID,这会使工作变得困难很多倍。

要考虑的是多次运行 API-call 并将结果添加到视图中。

我做了一个小测试,将 2 个JSON 合并在一起,效果很好。 例子:

@products = data_1['data'] + data_2['data']

当然,这是手工制作的,而且很简单。我想我能做的就是对它们做一个each do 并运行代码,如下所示:

### CONTROLLER
product_id = Array(params[:product_id].split(','))
product_id.each do |id|
    uri = URI.parse("https://website.com/api?product_id=#{id}")

    request = Net::HTTP::Get.new(uri)
    request["Accept"] = "application/json"

    req_options = { use_ssl: uri.scheme == "https", }
    response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
      http.request(request)
    end
    data = JSON.parse(response.body)

    @products = data['data']
end


### VIEW
- @products.each do |product|
  %p= product.name
  %p= product.date

这不会给我任何错误,但在我看来,我只看到最后一个product_id param 的详细信息。如果我将@products = data['data'] 移出each do 也是如此。

在绝望的尝试中,我也尝试了这个,但没有运气:

@products = id.as_json.merge(data['data'])

感谢任何帮助!

【问题讨论】:

  • 你的代码不是总是覆盖产品吗?数据 = JSON.parse(response.body) 产品 = 数据['data']
  • @RicardoJacas 谢谢。是的,它似乎覆盖了所有这些,只选择最后一个

标签: json ruby-on-rails-4 merge


【解决方案1】:

答案更接近我的想法。我需要在variable 本身上运行map,如下所示:

### CONTROLLER
product_id = Array(params[:product_id].split(','))

@products = product_id.map { |id|
  request = Net::HTTP::Get.new(uri)
  request["Accept"] = "application/json"

  req_options = { use_ssl: uri.scheme == "https", }
  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end
  data = JSON.parse(response.body)
  data['data']
}

希望它可以帮助某人:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多