1

このようにデータが縦に整理された大きなjsonファイルがあります

{
  "id": "blah",
  "jurisdiction": "ny",
  "name": "blah blah"
},
{
  "id": "blah",
  "jurisdiction": "ny",
  "name": "blah blha blah"
},
{
  "id": "blah",
  "jurisdiction": "ny",
  "name": "blahblah"
},

このようなデータでrakeタスクを実行しようとすると

task :import => :environment do     

      File.open(File.join(Rails.root, "lib", "tasks", "entries.json"), "r") do |file|
      file.each do |line|   
      entry_attrs = JSON.parse(line) if line && line.length >= 2
      Court.create!(entry_attrs)

    end
  end

end

予期しないトークン エラーが発生する

757: unexpected token at '{

手動でjsonを水平線に変更すると

{ "id": "blah", "jurisdiction": "ny", "name": "blah blah"}

その後、インポートが機能します。垂直方向に編成されたjsonを処理できるようにrakeタスクを作成する方法はありますか、またはjsonファイルをプログラムで適切な形式に変更する方法はありますか?

アップデート

こんな感じで一列にまとめました。rake import を実行すると、すべての json が画面に出力され、最後のエントリの後にコンマが続きます。

  {
      "Id": "blah",
      "jurisdiction": "ny",
      "name": "blah blah"
    }
'

その後、解析で例外が発生しました

l/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/json-1.8.0/lib/json/common.rb:155:in `parse'

したがって、rake タスクは、私が行う 2 番目のループに到達しませんCourt.create!(court)でした。問題が末尾のコンマであるかどうかはわかりません。

task :import => :environment do 

    File.open(File.join(Rails.root, "lib", "tasks", "file.json"), "r") do |file|
    string = ''
    file.each do |line|      
     string += line     
    end
    court_attrs = JSON.parse(string) if string  
    court_attrs.each do |court|
     Court.create!(court)
    end
  end

end
4

2 に答える 2