JSON格式不会出现在救援块中 - 红宝石

时间:2016-11-15 10:17:41

标签: json ruby exception rescue

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\\\"}\""。有什么原因吗?

1 个答案:

答案 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这真的很糟糕。