如何使用Ruby将数据附加/添加到JSON文件

问题描述 投票:1回答:2

所以我试图将信息添加到我的.json文件中,这是一个名字和一个姓氏,只需通过kali linux中的终端运行脚本即可。

在过去的5个小时里,我一直没有取得太大的进展,找到解决这个问题的方法但是没有取得多大进展。这让我发布此帖,任何人都知道如何解决此错误?

  • 终端出错
Traceback (most recent call last):
        4: from /root/Desktop/JSON_thingy.rb:8:in `<main>'
        3: from /root/Desktop/JSON_thingy.rb:8:in `open'
        2: from /root/Desktop/JSON_thingy.rb:9:in `block in <main>'
        1: from /usr/lib/ruby/vendor_ruby/json/common.rb:156:in `parse'
/usr/lib/ruby/vendor_ruby/json/pure/parser.rb:118:in `parse': source in not valid JSON! (JSON::ParserError)
require 'json'
require 'json/pure'

json = {"first_name" => "john", "last_name" => "doe"}

initial_json = File.read('/root/Desktop/jsonDatabase.json')

File.open("/root/Desktop/jsonDatabase.json","w") do |f|
  f.puts JSON.pretty_generate(JSON.parse(initial_json) << json )
end 
  • JSON
[
{
 "first_name": "albert",
 "last_name": "einstein"
},
{
 "first_name": "edgar",
 "last_name": "poe"
}
]
json ruby terminal kali-linux
2个回答
2
投票

当然,简单地将两个JSON字符串连接在一起不起作用,并且会导致无效的JSON。在您的示例中,您尝试添加的哈希不会在数组中结束但在后面。

正确的方法是读取现有的JSON文件并将其解析为RUBY数据结构,并在将所有内容写回JSON之前将Ruby中的新哈希添加到数组中。

require 'json'

filename = '/root/Desktop/jsonDatabase.json'

hash = { "first_name" => "john", "last_name" => "doe" }

array = JSON.parse(File.read(filename)
array << hash

File.open(filename, 'w') do |f|
  f.write(JSON.pretty_generate(array))
end

1
投票

之前的答案更清晰,我建议使用它。但是,跟踪错误清楚地告诉您问题是什么,这一行:

/usr/lib/ruby/vendor_ruby/json/pure/parser.rb:118:in `parse': 
source in not valid JSON! (JSON::ParserError)

您的代码中出错的部分是:

JSON.parse(initial_json)

因此,您需要首先确保要加载的文件中的数据实际上是有效的JSON。您可以使用jsonlint ruby gem或其他在线短片,如https://jsonlint.com/,或者如果你是duck duck go user this,其中任何一个都将为你“美化”你的json。

UPDATE

如果您使用ruby jsonlint,您可能会收到弃用警告,您可以放心地忽略它。但这是因为它的一个'依赖关系trollop正在抛弃弃用警告。我有opened a pull request来解决它。但看起来它可能无法维护,最近的提交差不多是2年前。 *叹

© www.soinside.com 2019 - 2024. All rights reserved.