从json到ruby哈希?

beo*_*ver 45 ruby json

我可以单程使用

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)
Run Code Online (Sandbox Code Playgroud)

但是我如何将它作为我的user_lib重新获得呢?

Phr*_*ogz 97

你想要JSON.parseJSON.load:

def load_user_lib( filename )
  JSON.parse( IO.read(filename) )
end
Run Code Online (Sandbox Code Playgroud)

这里的关键是使用IO.read一种简单的方法从磁盘加载JSON字符串,以便可以解析它.或者,如果您的文件中包含UTF-8数据:

  my_object = JSON.parse( IO.read(filename, encoding:'utf-8') )
Run Code Online (Sandbox Code Playgroud)

我已经链接到上面的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
Run Code Online (Sandbox Code Playgroud)

注意:我使用了"snake_case"名称作为对应于"camelCase"的方法,saveUserLib因为这是Ruby约定.

  • 与你所期望的相反,你会得到像`user ['name']`not`user [:name]`这样的东西 (3认同)