ruby - 从 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 作为从磁盘加载 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 约定。

https://stackoverflow.com/questions/9055096/

相关文章:

javascript - 如何 JSON 字符串化 javascript 日期并保留时区

json - PostgreSQL 中 JSON 数据类型的大小限制

json - 使用 JSON 协议(protocol)处理版本控制的最佳方法是什么?

c# - 将枚举序列化为字符串

java - 在 JSON 对象中解析 JSON 数组

ruby-on-rails - 设计 API 身份验证

php - PHP中的序列化或json?

java - 如何使用 @ResponseBody 从 Spring Controller 返回 J

c# - 在 C# 中解析 Json 字符串

java - 使用 Jackson 反序列化枚举