我下面举个例子字符串:将字符串拆分成哈希?
"[email protected]&user_id=13&last_seen=January 14, 2013"
我需要被转换成一个散列:
{ :email=>[email protected], :user_id=>13, :last_seen => 'January 14, 2013' }
我怎么能这样做?键和值可以是任何东西(它们不总是email
和user_id
),并且可能有几十个。
我下面举个例子字符串:将字符串拆分成哈希?
"[email protected]&user_id=13&last_seen=January 14, 2013"
我需要被转换成一个散列:
{ :email=>[email protected], :user_id=>13, :last_seen => 'January 14, 2013' }
我怎么能这样做?键和值可以是任何东西(它们不总是email
和user_id
),并且可能有几十个。
使用CGI库你已经免费获得:
require 'cgi'
parsed = CGI.parse("[email protected]&user_id=13&last_seen=January 14, 2013")
# => {"email"=>["[email protected]"], "user_id"=>["13"], "last_seen"=>["January 14, 2013"]}
或者,如果你使用rack:
require 'rack/utils'
parsed = Rack::Utils.parse_query("[email protected]&user_id=13&last_seen=January 14, 2013")
# => {"email"=>"[email protected]", "user_id"=>"13", "last_seen"=>"January 14, 2013"}
str = "[email protected]&user_id=13&last_seen=January 14, 2013"
Hash[*str.split(/=|&/)]
如果你在Rails的是,你可以象征键与Hash#symbolize_keys
,否则你可以自己做。
是否有任何第一个使用第二个的理由是什么?第一个似乎与我的示例字符串正常工作。 – Shpigford
@Shpigford:第一个是真正的答案,你应该实际使用的方法。第二个答案是在这里教你'Hash []'语法和'String#split'方法。但是,请注意,解析,甚至解析单个行,这是一个超出诸如split之类的简单方法的任务。 –
如何下面:
require 'uri'
str = "[email protected]&user_id=13&last_seen=January 14, 2013"
URI.decode_www_form(str)
# => [["email", "[email protected]"],
# ["user_id", "13"],
# ["last_seen", "January 14, 2013"]]
Hash[URI.decode_www_form(str)]
# => {"email"=>"[email protected]",
# "user_id"=>"13",
# "last_seen"=>"January 14, 2013"}
今天我从这里学到了很好的东西,2个新的图书馆。 :) –