我需要将哈希的值和密钥转换为字符串,以便正确地将其准备为参数Net::HTTP.post_form
。例如:将密钥和哈希值转换为字符串
我需要转换
{:x => [1,2,3,4]}
到
{"x"=>"[1, 2, 3, 4]"}
到符号转换为字符串是很重要的,并且阵列用引号括起来。
to_json
返回一个字符串,并不能解决我的问题;我需要一个散列作为回报。- 哈希可能有更多的键和值,所以我不能硬编码
to_s
到每个键或值。
我该如何执行它?
我需要将哈希的值和密钥转换为字符串,以便正确地将其准备为参数Net::HTTP.post_form
。例如:将密钥和哈希值转换为字符串
我需要转换
{:x => [1,2,3,4]}
到
{"x"=>"[1, 2, 3, 4]"}
到符号转换为字符串是很重要的,并且阵列用引号括起来。
to_json
返回一个字符串,并不能解决我的问题;我需要一个散列作为回报。to_s
到每个键或值。我该如何执行它?
这个怎么样
Hash[ { :x => [1,2,3,4] }.map { |k, v| [k.to_s, v.to_s] } ]
#=> {"x"=>"[1, 2, 3, 4]"}
或者对红宝石> = 2.1
{ :x => [1,2,3,4] }.map { |k, v| [k.to_s, v.to_s] }.to_h
#=> {"x"=>"[1, 2, 3, 4]"}
不要重新发明一个完善的车轮。相反,Ruby的URI是一个很好的工具来使用:
require 'uri'
uri = URI.parse('http://www.example.com')
uri.query = URI.encode_www_form({:x => [1,2,3,4]})
uri.to_s # => "http://www.example.com?x=1&x=2&x=3&x=4"
如果你只想要查询值:
query = URI.encode_www_form({:x => [1,2,3,4]}) # => "x=1&x=2&x=3&x=4"
这听起来真的像你重塑车轮,如果你要发送通过Net :: HTTP。序列化一个散列到{"x"=>"[1, 2, 3, 4]"}
将限制你的代码只使用你的代码。使用JSON,YAML或XML将使您的生活更轻松,并且您的代码更具可移植性。
JSON可以很容易地从机器移动散列机器,像Ruby/Python的/的Java/Perl的语言之间,无论是浏览器服务器或客户机到服务器:
require 'json'
hash = {:x => [1,2,3,4]}
hash.to_json
=> "{\"x\":[1,2,3,4]}"
JSON[hash.to_json]
=> {
"x" => [
[0] 1,
[1] 2,
[2] 3,
[3] 4
]
}
这将哈希的往返传递给JSON的表示,返回哈希。中间字符串"{\"x\":[1,2,3,4]}"
很容易通过Net :: HTTP发送。
但这与我所需要的不同。如你所见,这个方法用多个值设置'x'。我需要它接受一个单一的价值;字符串'“[1,2,3,4]”'。那不一样。 – 2013-03-03 15:42:18
为此使用Ruby的URI类。 – 2013-03-02 05:16:15