我正在尝试遍历JSON对象,但不能,因为我的一个JSON文件中有两个单独的JSON对象。我如何合并两个对象?
这是我的Json文件当前的样子
{"visit_count":280,"employability":"employed","nationality":"Canadian","income":"5555","email":"dsfs@fsfs"}
{"visit_count":280,"employability":"employed","nationality":"Canadian","income":"5555","email":"dsfs@fsfs"}
这就是我将数据存储在json文件中的方式
if env["REQUEST_METHOD"] == "POST"
json = template_data.to_json
open('answers.json', 'a') do |file|
file.puts json
end
end
我尝试了此解决方案来合并JSON对象
data_hash = JSON.parse(File.read('answers.json'))
data_hash.gsub(/}.*?{/m, '},{')}]")
这是我尝试上述操作时出现的错误
`load': admin.rb:10: syntax error, unexpected tSTRING_DEND, expecting keyword_end (SyntaxError)
ta_hash.gsub(/}.*?{/m, '},{')}]")
任何帮助将不胜感激
答案 0 :(得分:1)
首先,您的文件不是JSON。如果您希望保持这种状态并且仍然能够解析文件,建议您阅读每一行并将其作为哈希添加到数组中,如下所示:
File.foreach("answers.json").map { |x| JSON.parse(x) }
=> [
{"visit_count"=>280, "employability"=>"employed", "nationality"=>"Canadian", "income"=>"5555", "email"=>"dsfs@fsfs"},
{"visit_count"=>280, "employability"=>"employed", "nationality"=>"Canadian", "income"=>"5555", "email"=>"dsfs@fsfs"}
]
如果要保存正确的JSON,则需要保存一个对象数组。最简单的方法是JSON.parse
的文件内容,向数组添加一个新对象,将其转储为JSON,然后再次将其保存到文件中,如下所示:
File.open("answers.json", "r+") do |f|
contents = File.read("answers.json")
prev = contents.empty? ? [] : JSON.parse(contents)
f.write(prev.push(template_data).to_json)
end