如何从JSON初始化Ruby Datamapper对象?

时间:2013-11-21 14:02:47

标签: ruby json datamapper

我正在使用Ruby与Sinatra和DataMapper。创建一个“获取”Web服务非常简单,该服务通过类似Item.all().to_json的方式向UI提供数据集 但是,目的是让UI使用数据集进行crud工作并返回单个JSON对象以进行添加或更新。我还没有找到一个等效的“from_json”DataMapper函数来初始化一个Item对象。

作为解决方法,我正在使用JSON.parse,如下所示:

item_data = JSON.parse(request.body.read, :quirks_mode => true)

这有效,但是我必须创建一个新的DataMapper对象,即item = Item.new, 并将item_data中的所有元素复制到item中,但我想认为这是一种更简单的方法。

欢迎提出任何建议。

2 个答案:

答案 0 :(得分:1)

好像你有:

class Item
   property :body, String
end

所以你可能想要这样做:

class Item
   property :body, Json
end

Json样式属性,就像String一样,唯一的区别是在加载/存储时数据将通过JSON解析器。

答案 1 :(得分:0)

我遇到了同样的问题!

你可以像这样创建一个帮手:

helpers do
  def json_params
    begin
      JSON.parse(request.body.read)
    rescue
      halt 400, { message:'Invalid JSON' }.to_json
    end
  end
end

创建Datamapper对象:

@object = Object.new(json_params)
@object.save