为什么Rails反序列化蛇案例数据结构,但序列化驼峰案例数据结构?

时间:2014-12-03 12:32:03

标签: ruby-on-rails json serialization

这是我的第一个Ruby on Rails项目之一,在我的请求中发送带有用snake case编写的属性的JSON并在我的响应中接收带有驼峰式写入属性的JSON是很奇怪的。

以下是请求有效负载的示例:

{
  "end_point":"test"
}

以下是响应有效负载的示例:

{
  "endPoint":"test"
}

以下是使用和返回上述相似数据结构的代码: def创建

def create
    @api = interactor.create(params[:organization_id], api_params)
    respond_to do |format|
        format.json { render :show, status: :created, location: api_url(@api) }
    end
end

1 个答案:

答案 0 :(得分:0)

使用ActiveSupport中的String#camelize方法(Rails附带),如下所示:

attributes_hash = { "test_data" => "test" }
json_hash = Hash[attributes_hash.map {|k, v| [k.camelize(:lower), v] }]
#=> {"testData"=>"test"}

现在,您可以将其转换为JSON字符串:

p json_hash.to_json #=> "{\"testData\":\"test\"}"

更新:您可以在模型类中覆盖serializable_hash方法(因为您不清楚代码中的interceptor究竟是什么,我假设您& #39; d需要将它放在你的实例化对象的类中,以便像JSON一样发送数据) -

def serializable_hash(options = nil)
  options ||= {}

  if options[:camelize]
    Hash[attributes.map {|k, v| [k.camelize(:lower), v] }]
  else
    super
  end
end

现在,您可以执行:@api.to_json(:camelize => true)并将属性转换为除第一个字符之外的其他字符,即:endPoint