如何反转Hash.inspect或Array.inspect?(又名.to_s)在Ruby中

Cri*_*tta 10 ruby hash serialization inspect

我不小心通过调用my_hash.to_s等于的方式将Ruby散列保存到Ruby 1.9中的字符串my_hash.inspect.这给了我一个像这样的字符串:

'{"foo"=>{"bar"=>"baz", "qux"=>"quux"}' 
Run Code Online (Sandbox Code Playgroud)

我现在想将其恢复为哈希值.这是怎么做到的?

我不是在寻找其他序列化技术的解释,我知道它们.我只需要一种方法来恢复它,所以我可以正确的方式保存它.

Son*_*tos 21

最快的答案是:eval.

my_hash = eval(my_str_hash)
Run Code Online (Sandbox Code Playgroud)

  • 警告:永远,永远不要评估不可信的输入。 (2认同)

Jür*_*bel 6

评估它.

当然,对于任意输入来说这是不安全的,但是你说你知道序列化问题.它不适用于包含递归引用的集合或eval(x.inspect)!= x的其他对象.