Rails - 使用camelize将模型序列化为JSON

nix*_*mus 6 serialization activerecord json ruby-on-rails

我需要将模型序列化为json并使所有键都被骆驼化.我看到to_xml中有一个选项允许使用驼峰.我似乎无法强迫json序列化给我一个camelized哈希.这是铁路可能的东西吗?

Pet*_*ete 10

我有类似的问题.经过一些研究后,我将as_json ActiveModel方法与一个可以使用Hash密钥的帮助程序包装在一起.然后我将模块包含在相关模型中:

# lib/camel_json.rb
module CamelJson
  def as_json(options)
    camelize_keys(super(options))
  end

  private
  def camelize_keys(hash)
    values = hash.map do |key, value|
      [key.camelize(:lower), value]
    end
    Hash[values]
  end
end



# app/models/post.rb
require 'camel_json'
class Post < ActiveRecord::Base
    include CamelJson
end
Run Code Online (Sandbox Code Playgroud)

这对我们的情况非常有效,这种情况相对简单.但是,如果你使用JBuilder,显然有一个配置将camel case设置为默认值:https://stackoverflow.com/a/23803997/251500


jba*_*arr 5

如果您使用rails,请跳过添加的依赖项并使用Hash#deep_transform_keys.它还具有嵌入式嵌套 的附加好处(如果您正在执行类似操作,则会很方便user.as_json(includes: :my_associated_model)):

h = {"first_name" => "Rob", "mailing_address" => {"zip_code" => "10004"}}
h.deep_transform_keys { |k| k.camelize(:lower) }
=> {"firstName"=>"Rob", "mailingAddress"=>{"zipCode"=>"10004"}}
Run Code Online (Sandbox Code Playgroud)

资料来源:https://github.com/rails/rails/blob/4-2-stable/activesupport/lib/active_support/core_ext/hash/keys.rb#L88


Ber*_*als -1

在 Rails 中使用驼峰化属性名称对我来说似乎很奇怪,更不用说 json 了。我会遵守约定并使用带下划线的变量名称。

然而,看看这个宝石:RABL。它应该能够帮助你。

  • javascript 按照惯例使用驼峰命名法,那么将 json 属性也驼峰化不是更有意义吗? (36认同)