从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.parse
或JSON.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