如何使用 Ruby 将数据保存到 JSON 中并在以后使用?
Posted
技术标签:
【中文标题】如何使用 Ruby 将数据保存到 JSON 中并在以后使用?【英文标题】:How to save data into JSON with Ruby and use it later? 【发布时间】:2022-01-23 18:34:46 【问题描述】:我正在构建一个简单的“学校图书馆”应用程序以在终端中运行,并将我的大部分文件构建为类。现在我想存储收到的数据,如书名、作者、教师姓名等,我想将其存储在 JSON 文件中。
当我想使用 Ruby 编写文件时,问题就出现了,我执行 File.write("path_to_my_file", data)
并且它正在写入 JSON 文件,但它没有写入我想要的内容。
而不是写
[
"Title": "My title",
"Author": "My author"
]
或类似的东西,我得到了
["#<ActualBook:0x00000237dbce9ec8>, #<ActualBook:0x00000237dbdg3r8>"]
其中“ActualBook”是我创建新书的班级名称。 我不知道如何实现这一点。 我试过这段代码但没有运气:
class Storing
def initialize(arr)
@books = arr
end
def stores_data
data = []
@books.each do |book|
data.push([book.title, book.author])
end
send = JSON.dump(data)
if !File.exist?("./data/books.json")
File.new("./data/books.json", "w+")
end
File.write("./data/books.json", data)
end
end
有什么想法吗?
【问题讨论】:
【参考方案1】:您需要先序列化为 JSON
您当前正在将本机 Ruby 对象写入文件,而不是 JSON。要将对象序列化为 JSON,您需要在需要 JSON module 之后对其调用 #to_json 之类的方法。
例如,使用 Ruby 3.0.3:
require 'json'
books = ["Title"=>"My title", "Author"=>"My author"]
File.open("books.json", "w") |f| f.puts books.to_json
会将["Title":"My title","Author":"My author"]
的预期 JSON 对象写入您的文件,然后自行关闭。
如果您愿意,您可以验证这在 Ruby 中是否有效,或者在命令行中使用 jq。作为命令行示例:
jq . books.json
[
"Title": "My title",
"Author": "My author"
]
当然还有其他方法可以生成各种格式的 JSON 对象以进行序列化,但这是您的代码中缺少的部分。在将 Ruby 对象写入文件之前,您必须将它们转换为 JSON 对象,或者(在您的情况下)您最终只需要编写对象的隐式 #to_str 值。
【讨论】:
谢谢,这很有帮助!以上是关于如何使用 Ruby 将数据保存到 JSON 中并在以后使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何能够将数据保存在列表中并在 recyclerview 中显示
如何让 vbscript 将变量保存到文本文件中并在重新打开程序时调用它们?