Leventix, terima kasih atas jawaban Anda.
Metode Marshal.load (Marshal.dump (h)) mungkin memiliki integritas paling tinggi dari berbagai metode karena metode ini mempertahankan jenis kunci asli secara rekursif .
Ini penting jika Anda memiliki hash bersarang dengan campuran string dan kunci simbol dan Anda ingin mempertahankan campuran tersebut setelah dekode (misalnya, ini bisa terjadi jika hash Anda berisi objek khusus Anda sendiri selain sepertiga yang sangat kompleks / bersarang) objek -party yang kuncinya tidak dapat Anda manipulasi / konversi karena alasan apa pun, seperti batasan waktu proyek).
Misalnya:
h = {
:youtube => {
:search => 'daffy', # nested symbol key
'history' => ['goofy', 'mickey'] # nested string key
}
}
Metode 1 : JSON.parse - melambangkan semua kunci secara rekursif => Tidak menyimpan campuran asli
JSON.parse( h.to_json, {:symbolize_names => true} )
=> { :youtube => { :search=> "daffy", :history => ["goofy", "mickey"] } }
Metode 2 : ActiveSupport :: JSON.decode - hanya melambangkan kunci tingkat atas => Tidak menyimpan campuran asli
ActiveSupport::JSON.decode( ActiveSupport::JSON.encode(h) ).symbolize_keys
=> { :youtube => { "search" => "daffy", "history" => ["goofy", "mickey"] } }
Metode 3 : Marshal.load - mempertahankan campuran string / simbol asli dalam kunci bersarang. SEMPURNA!
Marshal.load( Marshal.dump(h) )
=> { :youtube => { :search => "daffy", "history" => ["goofy", "mickey"] } }
Kecuali jika ada kelemahan yang tidak saya sadari, saya akan berpikir Metode 3 adalah cara yang tepat.
Bersulang
http://stackoverflow.com/a/43773159/1297435
untuk rel 4.1