JSON формат не приходит в блоке спасения - ruby

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 ответ

Второй аргумент 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 Это действительно очень плохо.

Другие вопросы по тегам