2011-04-25 100 views
0

我創造透過JSON.stringify(對象)我的HTML視圖一個JSON對象,如何將它轉換爲一個Ruby對象,看起來它輸出以下JSON對象JSON對象到軌對象

{ 
"0X1W6": "{\"type\":\"Hourly\",\"hr\":\"12\",\"min\":\"30\",\"every_hr\":\"5\"}", 
    "Tk18f": "{\"type\":\"Daily\",\"hr\":\"12\",\"min\":\"30\",\"days_checked\":[1,4]}" 
} 

是這樣的:

[ 
    { :type => 'Hourly', :hr => 12, :min => 30, :every_hr => 5} 
    { :type => 'Daily', :hr => 12, :min => 30, :days_checked => [1,4]} 
] 

回答

2
result = [] 

z = ActiveSupport::JSON.decode('{ 
    "0X1W6": "{\"type\":\"Hourly\",\"hr\":\"12\",\"min\":\"30\",\"every_hr\":\"5\"}", 
    "Tk18f": "{\"type\":\"Daily\",\"hr\":\"12\",\"min\":\"30\",\"days_checked\":[1,4]}" 
}') 

z.each_value do|i| 
    x = {} 
    ActiveSupport::JSON.decode(i).each{|k,v| 
    x[k.to_sym] = (v.class == String && v.to_i.to_s == v) ? v.to_i : v 
    } 
    result << x 
end 
2
{ 
"0X1W6": "{\"type\":\"Hourly\",\"hr\":\"12\",\"min\":\"30\",\"every_hr\":\"5\"}", 
    "Tk18f": "{\"type\":\"Daily\",\"hr\":\"12\",\"min\":\"30\",\"days_checked\":[1,4]}" 
}.to_json 
0

我假設你正在傳遞一個JSON從JavaScript到您的服務器。在服務器上,您可以使用'json'gem來解析JSON,如下所示:o = JSON.parse json_string

如果你真的需要數據結構的組合(刪除鍵0X1W6和Tk18f),你將不得不後處理你的紅寶石哈希到一個數組。使用相同的技術,您可以將字符串鍵轉換爲符號。

+0

JSON.parse json_string它被解析爲{0X1W6 =>「{類型:每小時....}所以第二散列是越來越存儲爲字符串而不是散列 – ed1t 2011-04-25 13:22:11

0

當我理解正確,你有JSON,並希望紅寶石散列。在rails中,可以使用ActiveSupport :: Json.decode(json)完成,而'json'是一個字符串。但這不會給你你正在尋找的確切結果,你還需要做:

ActiveSupport::Json.decode(json).values.symbolize_keys 

我希望這可以幫助。

+0

我發現了未定義的方法'symbolize_keys ' – ed1t 2011-04-25 13:24:12

+0

我認爲你使用的是通過主動支持在Hash上提供這種方法的Rails。沒有Rails的情況下,你可以要求這部分有效支持或像Sector中的帖子中所示的那樣自己象徵鍵。 – moritz 2011-04-26 14:20:28