如何在一个文件ruby中合并多个JSON对象

时间:2018-10-26 01:04:19

标签: ruby-on-rails json ruby rack

我正在尝试遍历JSON对象,但不能,因为我的一个JSON文件中有两个单独的JSON对象。我如何合并两个对象?

这是我的Json文件当前的样子

answers.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, '},{')}]")

任何帮助将不胜感激

1 个答案:

答案 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