Ruby on rails 解析多个json对象并将它们保存在Rails 4中
我使用以下命令执行curl命令:Ruby on rails 解析多个json对象并将它们保存在Rails 4中,ruby-on-rails,json,Ruby On Rails,Json,我使用以下命令执行curl命令: curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{ "map": {"lat":"123.45543","lon":"45.43424","vibration_level":"456","time_sent":"20.05.1994" } }' http://localhost:3000/maps 在我的创建控制器方法中,我
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
"map":
{"lat":"123.45543","lon":"45.43424","vibration_level":"456","time_sent":"20.05.1994" }
}' http://localhost:3000/maps
在我的创建控制器方法中,我有:
def create
@map = Map.new(map_params)
respond_to do |format|
if @map.save
format.json {
render :show, status: :created, location: @map
}
else
format.json { render json: @map.errors, status: :unprocessable_entity }
end
end
end
这种方法是支架式的。Rails会自动将我的JSON转换为哈希,并将其正确保存到我的数据库中。但是如果我有多个JSON对象,我该如何解析JSON呢
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
"map":
{"lat": "51.088672", "lon": "71.396522", "vibration_level": "300", "time_sent": "07:25:00"},
{"lat": "51.088672", "lon": "71.396453", "vibration_level": "300", "time_sent": "07:25:01"},
{"lat": "51.088829", "lon": "71.396476", "vibration_level": "300", "time_sent": "07:25:14"}
}' http://localhost:3000/maps
当我尝试该命令时,我得到一个解析错误
编辑:
maps_controller.rb
class MapsController 结束
在这种情况下,您也可以通过@maps=Map.create(Map_参数)
简单地创建它们,但是现在-您需要更改Map_参数
方法的定义,这是必须的
以下是如何:
def map_params
params.permit(maps: [:lat, :lon, :vibration_level, :time_sent])
end
还有一件事:将attr\u accessor:maps
添加到模型类中:
def Map < ActiveRecord::Base
attr_accessor :maps
# other code
end
def映射
编辑:
您正在JSON的末尾传递
“map”=>{}
,这就是您看到错误的原因 我认为这应该行得通,但我得到一个ActionDispatch::ParamSpaser::ParseError(795:在处出现意外标记。您可以将问题中的完整错误和控制器代码作为编辑发布吗?当您执行curl
命令时,请尝试发送maps
,而不是map
。因为这正是您的控制器所期望的。我在jsonlint中检查了我的json,发现其中有一些错误。在修复并更改后ing map->maps我还有一个错误。特别是我在参数中添加了map参数。我编辑了我的帖子。@yerassyl这是Rails的一个功能。惯例是创建和更新操作的输入参数包装在一个顶级键中,该键的名称来自于与控制器对应的模型的名称。例如:in您的MapsController
模型将是Map
,参数中的顶级键将是Map
。如果缺少此顶级键,Rails将自动添加它并复制该键中的整个参数散列。您可以根据需要禁用它:但它基本上是无害的。