Ruby on Rails - 合并来自 api 调用的多个 JSON
Ruby on Rails - Combine several JSONs from api call
在我的应用程序中,我需要对客户进行 API 调用以获取有关产品的信息(我通过提供 product_id
来实现)。
他们的 API 一次只允许 1 ID
,这会使工作变得困难很多倍。
想到的是 运行 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
这不会给我任何错误,但在我看来,我只看到最后 product_id param
的详细信息。与我将 @products = data['data']
移出 each do
.
相同
在绝望的尝试中,我也试过这个但没有运气:
@products = id.as_json.merge(data['data'])
感谢任何帮助!
答案和我的想法更接近了。我需要在 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']
}
希望对大家有所帮助:)
在我的应用程序中,我需要对客户进行 API 调用以获取有关产品的信息(我通过提供 product_id
来实现)。
他们的 API 一次只允许 1 ID
,这会使工作变得困难很多倍。
想到的是 运行 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
这不会给我任何错误,但在我看来,我只看到最后 product_id param
的详细信息。与我将 @products = data['data']
移出 each do
.
在绝望的尝试中,我也试过这个但没有运气:
@products = id.as_json.merge(data['data'])
感谢任何帮助!
答案和我的想法更接近了。我需要在 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']
}
希望对大家有所帮助:)