我可以使用
单程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重新获回?
答案 0 :(得分:96)
您需要JSON.parse
或JSON.load
:
def load_user_lib( filename )
JSON.parse( IO.read(filename) )
end
这里的关键是使用IO.read
作为从磁盘加载JSON字符串的简单方法,以便可以对其进行解析。或者,如果您的文件中包含UTF-8数据:
my_object = JSON.parse( IO.read(filename, encoding:'utf-8') )
我已经链接到上面的JSON文档,因此您应该阅读更多详细信息。但总结一下:
json = my_object.to_json
- 关于创建JSON字符串的特定对象的方法。json = JSON.generate(my_object)
- 从对象创建JSON字符串。JSON.dump(my_object, someIO)
- 创建一个JSON字符串并写入文件。my_object = JSON.parse(json)
- 从JSON字符串创建Ruby对象。my_object = JSON.load(someIO)
- 从文件创建一个Ruby对象。可替换地:
def load_user_lib( filename )
File.open( filename, "r" ) do |f|
JSON.load( f )
end
end
注意:我对与“camelCase”saveUserLib
对应的方法使用了“snake_case”名称,因为这是Ruby惯例。
答案 1 :(得分:2)
这是一些例子:
require 'json'
source_hash = {s: 12, f: 43}
json_string = JSON.generate source_hash
back_to_hash = JSON.parse json_string
答案 2 :(得分:2)
JSON.load
会做到这一点。这是一个双向的例子:
>> require 'json'
=> true
>> a = {"1" => "2"}
=> {"1"=>"2"}
>> b = JSON.dump(a)
=> "{\"1\":\"2\"}"
>> c = JSON.load(b)
=> {"1"=>"2"}