从JSON到ruby哈希?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (35)

我可以使用一种方式

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一种简单的方式从磁盘加载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

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

用户回答回答于

JSON.load会做的伎俩。以下是一个双向的例子:

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

扫码关注云+社区