Как объединить несколько объектов JSON в один файл ruby - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь перебрать объекты 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 голосов
/ 26 октября 2018

Ну, во-первых, ваш файл не в формате 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
...