2016-11-15 55 views
0
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\\\"}\""。任何原因?JSON格式不救援塊到來 - 紅寶石

+2

使用'puts' /'print'而不是'p'。 – mudasobwa

+0

puts/prints給出{「a」=>「b」}「{\」a \「=> \」b \「}」,而不是「{\」a \「:\」b \「}」 – Amith

+0

if你執行'require'json' hash = {「a」=>「b」} print hash.to_json'然後打印{「a」:「b」}。我的問題是爲什麼當它傳遞給救援塊時它不打印相同的結果 – Amith

回答

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這真的很糟糕。

+1

爲什麼不'JSON.parse'? – mudasobwa

+1

解析散列的字符串表示形式? –

+1

是的,自己試試:) – mudasobwa