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