如何在Ruby中为现有的JSON对象添加新的键/值对?
我的输出是
{
"2d967df3-ee07-4e40-8f65-7bbff59bbb7e": {
"name": "Book1",
"author": "Author1"
}
}
当我添加新的键/值对
时,我希望实现类似的功能{
"2d967df3-ee07-4e40-8f65-7bbff59bbb7e": {
"name": "Book1",
"author": "Author1"
},
"c55a3632-9bed-4a41-ae40-c1abfe0f332a": {
"name": "Book2",
"author": "Author2"
}
}
写入JSON文件的方法
def create_book(name, author)
tempHash = {
SecureRandom.uuid => {
"name" => name,
"author" => author
}
}
File.open("./books/book.json","w") do |f|
f.write(JSON.pretty_generate(tempHash))
end
end
答案 0 :(得分:1)
如何将新的键/值对附加到ruby中的现有JSON对象?
如果要将其添加到现有文件,则应首先读取Json,从中提取数据,向数组添加新哈希。也许这样的事情可以解决你的问题:
def create_book(name, author)
tempHash = {
SecureRandom.uuid => {
"name" => name,
"author" => author
}
}
data_from_json = JSON[File.read("./books/book.json")]
data_from_json = [data_from_json] if data_from_json.class != Array
File.open("./books/book.json","w") do |f|
f.write(JSON.pretty_generate(data_from_json << tempHash))
end
end
还有其他一些方法,比如将Json作为常用字符串进行操作,但为了安全起见,您应该提取数据,然后创建一个新的Json。
答案 1 :(得分:-1)
如果您需要新的键/值对与以前的数据位于同一JSON元素中,而不是将散列铲除(<<
),则将它们合并。
此外,通过翻转您首先合并的哈希,这可以使您将新的键/值对放在元素的开头或结尾。
因此,请从15年4月14日开始使用Maxim的解决方案,但要进行修改以将两个散列合并在一起。
data_from_json = JSON[http://File.read("./books/book.json")]
File.open("./books/book.json","w") do |f|
f.write(JSON.pretty_generate([data_from_json.merge(tempHash)])
end