我正在構建一個要在終端中運行的簡單“學校圖書館”應用程式,并將我的大部分檔案構建為類。現在我想存盤我收到的資料,如書名、作者、教師姓名等,我想將它存盤在一個 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
任何的想法?
uj5u.com熱心網友回復:
您需要先序列化為 JSON
您當前正在將本機 Ruby 物件寫入您的檔案,而不是 JSON。要將物件序列化為 JSON,您需要在需要JSON 模塊后對其呼叫 #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 }
將預期的 JSON 物件寫入[{"Title":"My title","Author":"My author"}]您的檔案,然后自行關閉。
如果需要,您可以驗證這在 Ruby 中是否有效,或者在命令列中使用 jq。作為命令列示例:
jq . books.json
[
{
"Title": "My title",
"Author": "My author"
}
]
當然還有其他方法可以生成各種格式的 JSON 物件以進行序列化,但這是代碼中缺少的部分。在將 Ruby 物件寫入檔案之前,您必須將它們轉換為 JSON 物件,或者(在您的情況下)您只是最終寫入物件的隱式 #to_str 值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390026.html
