require 'json'
begin
hash = {"a" => "b"}
raise StandardError, hash
rescue Exception => e
q = e.message
p q
p q.to_json
end
它应该打印"{\"a\":\"b\"}"
,但会打印"\"{\\\"a\\\"=>\\\"b\\\"}\""
。有什么原因吗?
答案 0 :(得分:3)
raise
方法的第二个参数始终被视为字符串,因此您无法从救援中获取哈希值,您可以将其转换为json并返回
require 'json'
begin
hash = {"a" => "b"}
raise StandardError, hash.to_json # to string
rescue Exception => e
q = JSON.parse(e.message) # from string
p q.to_json
end
=> "{\"a\":\"b\"}"
我也知道eval
的邪恶方式:
require 'json'
begin
hash = {"a" => "b"}
raise StandardError, hash
rescue Exception => e
q = eval(e.message)
p q.to_json
end
=> "{\"a\":\"b\"}"
但这并不好。使用eval
这真的很糟糕。