gpt4 book ai didi

json - 打开 json 字符串以便在 ruby​​ 中轻松读写

转载 作者:太空宇宙 更新时间:2023-11-03 17:26:18 24 4
gpt4 key购买 nike

我有一个 json 文件。我用它来存储信息,因此它会不断地被读取和写入。

总的来说,我对 ruby​​ 和 oop 是全新的,所以我确信我会以一种疯狂的方式去做这件事。

class Load
def initialize(save_name)
puts "loading " + save_name
@data = JSON.parse(IO.read( $user_library + save_name ))
@subject = @data["subject"]
@id = @data["id"]
@save_name = @data["save_name"]
@listA = @data["listA"] # is an array containing dictionaries
@listB = @data["listB"] # is an array containing dictionaries

end
attr_reader :data, :subject, :id, :save_name, :listA, :listB
end

example = Load.new("test.json")
puts example.id

=> 937489327389749

所以我现在可以轻松读取 json 文件,但我如何写回文件 - 引用示例?假设我想更改 ID example.id.change(7129371289)...或将词典添加到列表 A 和 B...这可能吗?

最佳答案

进出 JSON 的最简单方法是使用 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 对象。

摘自 this answer to another of your questions .

但是,如果需要,您可以将它包装在一个类中:

class JSONHash
require 'json'
def self.from(file)
self.new.load(file)
end
def initialize(h={})
@h=h
end

# Save this to disk, optionally specifying a new location
def save(file=nil)
@file = file if file
File.open(@file,'w'){ |f| JSON.dump(@h, f) }
self
end

# Discard all changes to the hash and replace with the information on disk
def reload(file=nil)
@file = file if file
@h = JSON.parse(IO.read(@file))
self
end

# Let our internal hash handle most methods, returning what it likes
def method_missing(*a,&b)
@h.send(*a,&b)
end

# But these methods normally return a Hash, so we re-wrap them in our class
%w[ invert merge select ].each do |m|
class_eval <<-ENDMETHOD
def #{m}(*a,&b)
self.class.new @h.send(#{m.inspect},*a,&b)
end
ENDMETHOD
end

def to_json
@h.to_json
end

end

上面的行为就像一个散列,但你可以使用 foo = JSONHash.from("foo.json") 从磁盘加载,像往常一样修改那个散列,然后就可以了foo.save 当你想保存到磁盘时。

或者,如果您的磁盘上没有文件开头:

foo = JSONHash.new a:42, b:17, c:"whatever initial values you want"
foo.save 'foo.json'
# keep modifying foo
foo[:bar] = 52
f.save # saves to the last saved location

关于json - 打开 json 字符串以便在 ruby​​ 中轻松读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9080783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com