Ruby on rails 解析多个json对象并将它们保存在Rails 4中

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命令:

 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将自动添加它并复制该键中的整个参数散列。您可以根据需要禁用它:但它基本上是无害的。