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]
以下控制器动作
@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]