从JSON到ruby哈希?

我可以使用一种方式

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) 

但是我怎样才能把它作为我的user_lib?

你想要JSON.parseJSON.load

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

这里的关键是使用IO.read作为从磁盘加载JSONstring的简单方法,以便它可以被parsing。 或者,如果您的文件中包含UTF-8数据:

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

我已经链接到上面的JSON文档,所以你应该阅读,了解更多的细节。 但总的来说:

  • json = my_object.to_json – 在特定对象上创build一个JSONstring的方法。
  • json = JSON.generate(my_object) – 从对象中创buildJSONstring。
  • JSON.dump(my_object, someIO) – 创build一个JSONstring并写入文件。
  • my_object = JSON.parse(json) – 从JSONstring中创build一个Ruby对象。
  • my_object = JSON.load(someIO) – 从文件创build一个Ruby对象。

或者:

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

注意:我使用了与“camelCase” saveUserLib对应的方法的“snake_case”名称,因为这是Ruby约定。

JSON.load将做的伎俩。 这是一个双向的例子:

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

这里是一些例子:

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