我有一个json文件,里面有很多电影。我想创建一个模型'Movie',并从json文件中填充所有电影。我该怎么做?我知道我可以将json文件解析成哈希,但这不是我要找的东西。
您要查找的正确术语是"种子"!
但是,您将需要一个数据库,以及创建数据库和相关movies
表的迁移。(有很多关于如何做到这一点的指南,以及官方文档)。
完成后,您需要"种子";你的数据库和json文件中的数据。
在seeds.rb
文件中,假设JSON文件是JSON形式的Movies
数组,您应该能够循环每个Movie
JSON对象并将其插入到您的数据库中。
为了增加docaholic的有用回复,这里有一些步骤/伪代码可能会有所帮助。
假设您正在使用SQL数据库,并且需要创建一个模型:
# creates a migration file.
rails generate migration create_movies title:string #duration_in_minutes:integer or whatever fields you have
# edit the file to add other fields/ensure it has what you want.
rake db:migrate
编写一个脚本来填充您的数据库。有很多模式(rake task, test fixture等),你想使用哪一个取决于你需要什么(是否用于测试,生产环境,作为新环境的种子数据,等等)。
但是通常代码是这样的:
text_from_file = File.read(file_path)
JSON.parse(text_from_file).each do |json_movie_object|
Movie.create!(title: json_movie_object[:title], other_attribute: json_movie_object[:other_attribute])
# if the json attributes exactly match the column names, you can do
# Movie.create!(json_movie_object)
end
对于大量数据,这不是性能最好的选项。对于大文件,您可以使用insert_all以获得更高的效率,但这绕过了activerecord验证和回调,因此您需要了解这意味着什么。
对于我的例子,我需要在周围播种200个数据从JSON文件的生产,所以我试图从JSON文件插入数据在数据库中。
,首先,我在rails项目中创建了一个数据库
rails generate migration create_movies title:string duration_in_minutes:integer
# or whatever fields you have
# edit the file to add other fields/ensure it has what you want.
rake db:migrate
现在是时候播种数据了!假设您的movies.json
文件有:
[
{"id":"1", "name":"Titanic", "time":"120"},
{"id":"2", "name":"Ruby tutorials", "time":"120"},,
{"id":"3", "name":"Something spetial", "time":"500"}
{"id":"4", "name":"2HAAS", "time":"320"}
]
现在,就像这4个数据,认为你的JSON文件有400多个数据要输入,这是一个噩梦,手动写入种子文件。你需要添加JSON宝石工作。运行
bundle add json
使用JSON文件。
在db/seed.rb
文件中,添加这些行来添加数据库中的400+信息:
infos_from_json = File.read(your/JSON/file/path/movies.json)
JSON.parse(infos_from_json).each do |t|
Movie.create!(title: t['name'], duration_in_minutes:
t['time'])
end
:
修复JSON文件infos_from_json
变量从文件目录JSON.parse
调用JSON数据,然后声明变量以指示文件所在的位置,each do
循环划分每个数据,|t|
将用于在每次调用中添加部分JSON.parse(infos_from_json).
。Movie.create!(title: t['title'], duration_in_minutes: t['time'])
正在向数据库中添加数据
这是我们如何轻松地从JSON文件中添加数据到数据库的方法。
有关在数据库中播种数据的更多信息,请查看文档
编辑:这个操作需要JSON gem输入
bundle add json