以下控制器动作
@result = HTTParty.post(
'https://test.co.uk/interface/search',
:body => [...]
有回应。未在预期的json分析结构中查看响应。这是一个漫长的哈希...
{"versionNumber"=>"5.5", "availabilitySummary"=>{"totalAvailable"=>102, "totalOnRequest"=>0},
"structures"=>[... big array]
该数组具有许多子哈希"currencyCode"=>"USD", "info", "options"=>[sub-array]
。
我想首先在视图表单中访问结构数组(出于测试目的,然后最终将结果提交到数据库。)
这怎么实现?
答案 0 :(得分:1)
首先,如果可能的话,将HTTParty内容移至工作程序。这样,如果要查找数据的服务器不可用,您将避免应用程序崩溃。否则,请确保将HTTParty内容包装在begin - rescue - end
块中,并在那里捕获适当的异常。
第二,将整个JSON传递到视图并在视图中访问是一种不好的做法,因为它会大大降低模板渲染的速度。相反,创建一个服务对象,该服务对象将返回易于在视图中访问的数据模型。给它一个名称,以某种方式描述它的含义-MyJsonParser可能不是最好的名称,但是您知道我的意思。实现一个#call
方法,该方法以一种易于在视图中访问的格式为您返回数据。
my_json_parser.rb
class MyJsonPArser
def call
response = post_request
parse_structures(response)
end
private
def post_request
HTTParty.post(...)
end
def parse_structures(response)
structures = response["structures"]
# do more work with the big structures array ...
end
end
your_controller.rb
def your_method
@data = MyJsonParser.new.call
end
your_view.html.erb
<% @data.each do |item| %>
<div><%= item %></div>
...
<% end %>
答案 1 :(得分:1)
我认为您可以这样做:
@result["structures"][0]
@result["structures"][1]