Leventix, je vous remercie pour votre réponse.
Le Maréchal.la charge(le Maréchal.dump(h)) méthode a probablement le plus de l'intégrité des différentes méthodes, car elle préserve la clé d'original de types de manière récursive.
Ce qui est important dans le cas où vous avez un imbriquée de hachage avec un mélange de chaîne et de touches de symbole et que vous souhaitez conserver ce mélange à décoder (par exemple, cela pourrait se produire si votre hash contient vos propres objets personnalisés, en plus de très complexe/imbriquée tiers des objets dont les clés vous ne pouvez pas manipuler/convertir pour quelque raison que ce soit, comme un projet de contrainte de temps).
E. g.:
h = {
:youtube => {
:search => 'daffy', # nested symbol key
'history' => ['goofy', 'mickey'] # nested string key
}
}
Méthode 1: JSON.analyser symbolise toutes les clés de manière récursive => Ne permet pas de conserver original mix
JSON.parse( h.to_json, {:symbolize_names => true} )
=> { :youtube => { :search=> "daffy", :history => ["goofy", "mickey"] } }
Méthode 2: ActiveSupport::JSON.décoder symbolise haut-niveau des clés => Ne permet pas de conserver original mix
ActiveSupport::JSON.decode( ActiveSupport::JSON.encode(h) ).symbolize_keys
=> { :youtube => { "search" => "daffy", "history" => ["goofy", "mickey"] } }
Méthode 3: Maréchal.charge préserve chaîne d'origine/symbole mélange dans le imbriqués les touches. PARFAIT!
Marshal.load( Marshal.dump(h) )
=> { :youtube => { :search => "daffy", "history" => ["goofy", "mickey"] } }
Sauf si il ya un inconvénient que je le sache, je pense Méthode 3 est le chemin à parcourir.
Cheers