我试着玩DALL·E2,我试着做的只是简单地调用他们的图像创建API,并使用他们返回的图像URL显示图像。
我一直在考虑如何根据JSON响应在网页上显示图像。
我所做的是将响应保存在ImageRequest模型的JSON属性中。
我的代码如下所示:
def new
@image_request = ImageRequest.new
end
def create
@image_request = ImageRequest.new(image_request_params)
client = OpenAI::Client.new(access_token: "my_key")
response = client.images.generate(parameters: { prompt: @image_request.prompt, n: @image_request.versions })
@image_request.urls = response
respond_to do |format|
if @image_request.save
format.html { redirect_to image_request_url(@image_request), notice: "Image request was successfully created." }
format.json { render :show, status: :created, location: @image_request }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @image_request.errors, status: :unprocessable_entity }
end
end
end
def show
@image_request = ImageRequest.find(params[:id])
end
但我试图确定的是如何解析和迭代JSON并显示图像?
# in psuedo code what I'm trying to do:
<% images.each do |i| %>
<%= image_tag "url" %>
<% end %>
这就是OpenAI的回应:
{
"created": 1674850160,
"data": [
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/...."
},
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/..."
}
]
}
当我查看@image_request.urls
中JSON属性(创建后)中的存储值时,它是:
{"created"=>1674850160, "data"=>[{"url"=>"https://oaidalleapiprodscus.blob.core.windows.net..."}, {"url"=>"https://oaidalleapiprodscus.blob.core.windows.net/private/..."}]}
我已经研究过这些SO问题并进行了实验,但我可以找出如何遍历返回的data.url。
Iterating over JSON in Rails
How do I parse JSON with Ruby on Rails?
Access JSONB fields as normal ActiveRecord attributes
Iterating over JSON in Rails
Loop through API response with .each
1条答案
按热度按时间n6lpvg4x1#
如果
response
是{"created"=>1674850160, "data"=>[{"url"=>"https://oaida...
,那么JSON已经被解析为Ruby数据结构,然后需要将其转换为URL列表。从“data”数组的哈希中取出每个“url”值。
现在你有了一个可以迭代的URL数组。