3

文字列から配列を取得できます

http_params="created_end_date=2013-02-28&created_start_date=2013-01-01&page_size=50&offset=0&order_id=0D1108211501118%0D%0A0D11108211501118%0D%0Ac%0D%0AD%0D%0ADK212071409743%0D%0AKK30109110100%0D%0AKK30111140300%0D%0AKK30111140400%0D%0AKK30115120100%0D%0AKK30115150100&page_number=1"

だから私はしたmyarray=http_params.split("&")

myarray=["created_end_date=2013-02-28", "created_start_date=2013-01-01", "page_size=50", "offset=0", "order_id=0D1108211501118%0D%0A0D11108211501118%0D%0Ac%0D%0AD%0D%0ADK212071409743%0D%0AKK30109110100%0D%0AKK30111140300%0D%0AKK30111140400%0D%0AKK30115120100%0D%0AKK30115150100", "page_number=1"] 

これをハッシュ myhash に変換する必要があります。これにより、Rest Client で myhash.to_json の呼び出しをポストできるようになります。基本的には、次のようなキーと値のペアにする必要があります。

{:created_end_date=>"2013-02-28",:created_start_date=>"2013-01-01"....}

逆の操作は次のように実行できることを知っています。

http_params = myhash.map{|k,v| "#{k}=#{v}"}.join('&')

しかし、私はこれのためのきちんとしたコードを思い付くことができません.

これについて私が行くべき最善の方法は何ですか?

4

2 に答える 2

5
require 'cgi'
hash = CGI::parse http_params

または、次を使用できます。

hash = Rack::Utils.parse_nested_query http_params

値を配列として返しません。

于 2013-03-21T14:03:30.830 に答える
2

純粋な Ruby メソッドを使用すると、次のように文字列をハッシュに変換できます。

"a=1&b=2".split('&').map { |h| Hash[*h.split("=")] }
=> [{"a"=>"1"}, {"b"=>"2"}]

Ruby コレクションの操作方法に関するブログ記事はこちら: http://thinkingonthinking.com/map-reduce-in-ruby/

シンボルをキーとして取得するには、少し追加の手順が必要です。

"a=1&b=2".split('&').map { |h| hs = h.split("="); Hash[hs[0].to_sym, hs[1]] }
=> [{:a=>"1"}, {:b=>"2"}]

最後のステップとして、内側のハッシュ要素のマージを行う必要があります。これは次のように行うことができます:

"a=1&b=2".split('&').map { |h| hs = h.split("="); Hash[hs[0].to_sym, hs[1]] }.inject({}) { |s, h| s.merge(h) }
=> {:a=>"1", :b=>"2"}
于 2013-03-21T14:07:15.513 に答える