从ruby中的服务器响应中获取值

时间:2012-11-28 08:26:44

标签: ruby parsing response

我向服务器发送请求,服务器返回响应。如果我打印此响应,它看起来完全如下所述(带数组和大括号)。我是Ruby的新手,所以我有两个问题: 1.我应该在什么结构中添加此响应? 2.如何从此响应中获取值(例如user_id或user_status的值)。如何摆脱价值中的报价

请求代码:

def userGet(user_id_or_email)
uri = URI(SRV + '/userGet')
http = Net::HTTP.new(uri.host,uri.port)
req = Net::HTTP::Post.new(uri.path)
req['bla-bla'] = 'bla-bla'
req.set_form_data('search' => user_id_or_email)
res = http.request(req)
puts(res.read_body)
end

置位(res)

的输出
array (
  'user_id' => 301877459,
  'login' => '0301877459',
  'email' => 'YS5raG96eWFfdHZhc2lsaWlAY29ycC5iYWRvby5jb20=',
  'passwd' => 'cc03e747a6afbbcbf8be7668acfebee5',
  'partner_id' => '105',
  'user_status' => 'active',
  'nickname' => 'Test',
  'fullname' => 'Test',
)

2 个答案:

答案 0 :(得分:2)

正如其他评论家所提到的,第一步是确定响应的编码。如果您可以轻松更改服务器返回数据的方式,则可以输出有效的JSON并使用诸如this之类的gem。如果你不能,那么解析这种类型的响应的特殊方法就是定义一个这样的函数:

def parseResult(res)  
  # Remove the array wrapper and any leading/trailing whitespace
  parsed_string = res.gsub(/^\s*array\s*\(/, "").gsub(/[\s,]*\)[\s,]*$/, "")

  # Split the string into an array of key-value tuples
  parsed_array = parsed_string.split(',').collect do |tuple|
    tuple.split("=>").collect do |x|
      x.match(/^[\s',]*([^',]*)[\s',]*$/)[1]
    end 
  end

  # Convert the array of tuples into a hash for easy access
  Hash[parsed_array]
end

这是类似sawa的方法,但它假定您不能信任服务器返回的数据,因此无法安全地使用eval。

答案 1 :(得分:1)

不确定array ( ... )是什么意思,但假设它意味着哈希,你可以这样做:

string.eval(
  string
  .sub(/\A\s*array\s*\(/, "{")
  .sub(/\)\s*\z/, "}")
)