このようにデータが縦に整理された大きな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