如何从ruby中的查询字符串创建哈希?

时间:2014-02-24 14:45:32

标签: ruby

我想从查询字符串创建一个哈希。这是我的方法:

def qs2h(querystring)
  hashes = querystring.split('&').inject({}) do |result,query| 
    k,v = query.split('=')
    if !v.nil?
      result.merge(k.to_sym => v)
    elsif !result.key?(k)
      result.merge(k.to_sym => true)
    else
      result
    end
  end
  hashes
end

qs2h('a=1&b=2&c=3&d') #=> {:a => "1", :b => "2", :c => "3", :d => true}

在ruby中有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:7)

使用CGI::parse

CGI.parse('a=1&b=2&c=3&d')
# => {"a"=>["1"], "b"=>["2"], "c"=>["3"], "d"=>[]}
Hash[CGI.parse('a=1&b=2&c=3&d').map {|key,values| [key.to_sym, values[0]||true]}]
# => {:a=>"1", :b=>"2", :c=>"3", :d=>true}