Ruby on rails 解析来自httpparty响应的数据

Ruby on rails 解析来自httpparty响应的数据,ruby-on-rails,ruby,json,httparty,Ruby On Rails,Ruby,Json,Httparty,我从http方请求返回了大量JSON 在我的Rails控制器中,我获得了以下数据: @data = @request.parsed_response["InfoResponses"] 在我的html.erb中,我在屏幕上显示了@数据,如下所示: [{"AdditionalResponse"=>nil, "AddressResponse"=>nil, "HighResResponse"=>nil, "LowResResponse"=>nil, "OtherRespons

我从http方请求返回了大量JSON

在我的Rails控制器中,我获得了以下数据:

 @data = @request.parsed_response["InfoResponses"]
在我的html.erb中,我在屏幕上显示了@数据,如下所示:

[{"AdditionalResponse"=>nil, "AddressResponse"=>nil, "HighResResponse"=>nil, "LowResResponse"=>nil, "OtherResponse"=>nil, "Error"=>nil, "CarResponse"=>{"Values"=>[{"FieldDescription"=>"Colour", "FieldName"=>"COLOUR", "Value"=>BLUE}, {"FieldDescription"=>"Engine Size", "FieldName"=>"ENGINESIZE", "Value"=>1400}, {"FieldDescription"=>"Number Doors", "FieldName"=>"NUMBERDOORS", "Value"=>4}, {"FieldDescription"=>"Fuel", "FieldName"=>"FUEL", "Value"=>GAS}, {"FieldDescription"=>"Wheel Size", "FieldName"=>"WHEELSIZE", "Value"=>17}, {"FieldDescription"=>"CD Player", "FieldName"=>"CDPLAYER", "Value"=>Y}], 
"Error"=>nil, "Id"=>"2"}, "Id"=>"2", "DensityResponse"=>nil, "RiskIndexResponse"=>nil, "FinanceResponse"=>{"Value"=>Available, "Error"=>nil, "Id"=>"2"}}, 

{"AdditionalResponse"=>nil, "AddressResponse"=>nil, "HighResResponse"=>nil, "LowResResponse"=>nil, "OtherResponse"=>nil, "Error"=>nil, "CarResponse"=>{"Values"=>[{"FieldDescription"=>"Colour", "FieldName"=>"COLOUR", "Value"=>RED}, {"FieldDescription"=>"Engine Size", "FieldName"=>"ENGINESIZE", "Value"=>1400}, {"FieldDescription"=>"Number Doors", "FieldName"=>"NUMBERDOORS", "Value"=>4}, {"FieldDescription"=>"Fuel", "FieldName"=>"FUEL", "Value"=>GAS}, {"FieldDescription"=>"Wheel Size", "FieldName"=>"WHEELSIZE", "Value"=>19}, {"FieldDescription"=>"CD Player", "FieldName"=>"CDPLAYER", "Value"=>Y}], 
"Error"=>nil, "Id"=>"1"}, "Id"=>"1", "DensityResponse"=>nil, "RiskIndexResponse"=>nil, "FinanceResponse"=>{"Value"=>Available, "Error"=>nil, "Id"=>"1"}}]
在屏幕上,我只想显示CarResponse详细信息,即所有字段,如Colout、EngineSize等及其值,我想提取的唯一其他详细信息是FinanceResponse值和Id

提取这些细节的最佳方法是什么?我在这里展示了2,但是我的JSON响应可能包含与上面重复的相同的响应

编辑-我的HttpParty代码如下

def self.GetInforFromASPWebAPI
 @request_body = [{:Id => '1',
                    :A => '1',
                    :B => '1',
                    :C=> '1'}]

    post('localhost:50544/api/MyController/GetInfo', :body => @request_body.to_json,
                                     :headers => {'Content-Type' => 'application/json'})
end
这是在一个助手类中-然后在我的控制器中,我做了如下操作:

@response = ASPWebAPIClass.GetInforFromASPWebAPI

响应的内容甚至包含更多的数据,因此我使用了之前所做的工作,将其中的一些内容剥离到已解析的_响应中。

您应该有一个完整的类来表示API。然后,您的方法将获得您感兴趣的内容,而不是将整个响应传递回Rails控制器,迫使控制器知道如何解析API的响应。按照单一责任原则将所有API知识放入API类。因此,您的代码将更干净

例如:

class CarAPI
  include HTTParty
  base_uri 'localhost:50544/api/MyController'
  # any other initialization stuff

  def initialize
    @options = {
       :body => @request_body.to_json,
       :headers => {'Content-Type' => 'application/json'}
    }
  end

  def car_info
    response = self.class.post '/getinfo'

    # Create a simple Ruby hash with key/value pairs
    cars = {}
    response['InfoResponses'][0]['CarResponses']['Values'].each do |field|
      cars[field['FieldName']] = field['Value']
    end
    cars 
  end
end

这有点简化;您需要迭代所有响应(用循环/映射替换[0])。

HTTParty为您执行此操作。不要重新分析原始响应。显示您的HTTParty代码。@MarkThomas-嗨,Mark我已经编辑了我的问题,以包括我当前的HTTParty代码。您有完整的课程吗?初始值设定项看起来像什么?