de json à un hash rbuy?

Je peux aller dans un sens en utilisant

require 'json' def saveUserLib(user_lib) File.open("/Users/name/Documents/user_lib.json","w") do |f| f.write($user_lib.to_json) end end uname = gets.chomp $user_lib["_uname"] = uname saveUserLib($user_lib) 

mais comment puis-je le récupérer comme mon user_lib?

Vous voulez JSON.parse ou JSON.load :

 def load_user_lib( filename ) JSON.parse( IO.read(filename) ) end 

La clé ici est d’utiliser IO.read comme un moyen simple de charger la chaîne JSON à partir du disque, afin qu’il puisse être analysé. Ou, si vous avez des données UTF-8 dans votre fichier:

  my_object = JSON.parse( IO.read(filename, encoding:'utf-8') ) 

J’ai lié à la documentation JSON ci-dessus, donc vous devriez aller lire cela pour plus de détails. Mais en résumé:

  • json = my_object.to_json – méthode sur l’object spécifique pour créer une chaîne JSON.
  • json = JSON.generate(my_object) – crée une chaîne JSON à partir de l’object.
  • JSON.dump(my_object, someIO) – crée une chaîne JSON et écrit dans un fichier.
  • my_object = JSON.parse(json) – crée un object Ruby à partir d’une chaîne JSON.
  • my_object = JSON.load(someIO) – crée un object Ruby à partir d’un fichier.

Alternativement:

 def load_user_lib( filename ) File.open( filename, "r" ) do |f| JSON.load( f ) end end 

Note: J’ai utilisé un nom “snake_case” pour la méthode correspondant à votre “camelCase” saveUserLib car il s’agit de la convention Ruby.

JSON.load fera l’affaire. Voici un exemple qui va dans les deux sens:

 >> require 'json' => true >> a = {"1" => "2"} => {"1"=>"2"} >> b = JSON.dump(a) => "{\"1\":\"2\"}" >> c = JSON.load(b) => {"1"=>"2"} 

Voici un exemple:

 require 'json' source_hash = {s: 12, f: 43} json_ssortingng = JSON.generate source_hash back_to_hash = JSON.parse json_ssortingng