所以我试图将信息添加到我的.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
[
{
"first_name": "albert",
"last_name": "einstein"
},
{
"first_name": "edgar",
"last_name": "poe"
}
]
当然,简单地将两个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
之前的答案更清晰,我建议使用它。但是,跟踪错误清楚地告诉您问题是什么,这一行:
/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。
如果您使用ruby jsonlint,您可能会收到弃用警告,您可以放心地忽略它。但这是因为它的一个'依赖关系trollop
正在抛弃弃用警告。我有opened a pull request来解决它。但看起来它可能无法维护,最近的提交差不多是2年前。 *叹