0

サーバーにリクエストを送信すると、サーバーから応答が返されます。この応答を印刷すると、以下のように正確に表示されます(配列と中括弧を使用)。私はRubyを初めて使用するので、2つの質問があります。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

puts(res)の出力

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

2 に答える 2

2

他のコメント提供者が述べたように、最初のステップは応答のエンコーディングを決定することです。サーバーがデータを返す方法を簡単に変更できる場合は、有効なJSONを出力して、このような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を安全に使用できないことを前提としています。

于 2012-11-28T21:17:14.457 に答える
1

それが何をarray ( ... )意味するのかわかりませんが、それがハッシュを意味すると仮定すると、次のことができます。

string.eval(
  string
  .sub(/\A\s*array\s*\(/, "{")
  .sub(/\)\s*\z/, "}")
)
于 2012-11-28T09:56:51.023 に答える