2014-02-24 62 views
2

我想從查詢字符串創建一個哈希。這是我的方法:如何從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中做到這一點?

+0

如果你使用的鐵軌我想看看這個選項:http://stackoverflow.com/questions/2772778/parse-string-as-if-it-were- a-querystring-in-ruby-on-rails –

+0

另外,如果你不使用它:) – mdesantis

+0

我建議你不要象徵鍵,它可以打開DoS攻擊的大門;這就是Rails創建'HashWithIndifferentAccess'的原因。我會'需要'主動支持'並使用'HashWithIndifferentAccess' – mdesantis

回答

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} 
+0

這是我的預期!謝謝! – bprayudha