HTTParty 解析响应的子组件

HTTParty parsing sub-component of response

以下控制器动作

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

如何实现?

首先,如果可能的话,把 HTTParty 的东西移到一个 worker 上。这样,如果您为数据访问的服务器不可用,您将避免您的应用程序崩溃。否则,请确保将 HTTParty 内容包装在 begin - rescue - end 块中并在那里捕获适当的异常。 其次,将整个 JSON 传递给视图并在视图中访问它是一种不好的做法,因为它会大大减慢模板渲染速度。相反,创建一个服务对象,该对象将 return 易于在视图中访问的数据模型。给它起一个能以某种方式描述它相关内容的名称 - MyJsonParser 可能不是最好的名称,但您知道我的意思。实施 #call 方法,该方法 return 以易于在视图中访问的格式为您提供数据。

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 %>

我想你可以这样做:

@result["structures"][0]


@result["structures"][1]