如何将字符串中的哈希转换为哈希?

时间:2018-12-12 08:00:55

标签: ruby

如何将以字符串格式存储为哈希的redis数据接收的数据转换回hash?

尝试从redis检索为无法转换为哈希的字符串

字符串如下:

config/app.php

1 个答案:

答案 0 :(得分:1)

您无法将所有Ruby哈希参数保存在Redis哈希中,并且期望以类似的方式获取属性。 在将其保存到redis哈希之前,ruby会在属性上调用to_s

redis.hmset('foo', 'a', 'b', 'account', 1, 'date', Time.now)
redis.hgetall('foo') 
# => {"a"=>"b", "account"=>"1", "date"=>"2018-12-12 13:45:50 +0530"}

如上所述,将'1'转换为字符串,并将Time.now从Time * object * 2018-12-12 13:45:42 +0530)转换为字符串"2018-12-12 13:45:50 +0530"

您可以改为使用Marshal dump并将ruby哈希设置为redis键:

hash = {'a' => 'b', 'account' => 1, 'date' => Time.now }
# => {"a"=>"b", "account"=>1, "date"=>2018-12-12 13:47:25 +0530}
redis.set('foo', Marshal.dump(hash))
redis.get('foo')
# => "\u0004\b{\bI\"\u0006a\u0006:\u0006ETI\"\u0006b\u0006;\u0000TI\"\faccount\u0006;\u0000Ti\u0006I\"\tdate\u0006;\u0000TIu:\tTime\r\x88\xAD\u001D\x80-\xB8\x9CE\a:\voffseti\u0002XM:\tzoneI\"\bIST\u0006;\u0000F"
Marshal.load redis.get('foo')
#=> {"a"=>"b", "account"=>1, "date"=>2018-12-12 13:47:25 +0530}