首页 > 解决方案 > Ruby on Rails - 组合来自 api 调用的多个 JSON

问题描述

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

他们的 API 只允许 1ID个,这会使工作变得更加困难。

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

我做了一个小测试,将 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

这不会给我任何错误,但在我看来,我只看到 last 的详细信息product_id param。如果我搬出@products = data['data'].each do

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

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

任何帮助表示赞赏!

标签: jsonruby-on-rails-4merge

解决方案


答案更接近我的想法。我需要自己运行mapvariable如下所示:

### 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']
}

希望它可以帮助某人:)


推荐阅读