HTTParty解析响应的子组件

时间:2018-07-28 13:02:49

标签: ruby-on-rails arrays json httparty

以下控制器动作

@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]。 我想首先在视图表单中访问结构数组(出于测试目的,然后最终将结果提交到数据库。)

这怎么实现?

2 个答案:

答案 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]