Rails中如何将对象数组构成的哈希转换为驼峰键名的JSON
Ruby on Rails 蛇形命名转小驼峰JSON解决方案
核心实现思路
你之前用map和transform_values没有达到预期,大概率是没有先把Ruby模型的实例变量转换为可直接操作的哈希结构,再做键名转换。Rails内置了camelize方法可直接实现蛇形到驼峰的转换,传入:lower参数即可生成JS常用的小驼峰格式。
完整实现代码
# 1. 定义单个模型转驼峰哈希的公共方法 def convert_model_to_camel(model) # 若为ActiveRecord模型,可替换为as_json方法自定义返回字段,例如: # model.as_json(only: [:person_name, :person_id]).transform_keys { |key| key.camelize(:lower) } # 普通Ruby对象用instance_values提取所有实例变量为哈希 model.instance_values.transform_keys { |key| key.camelize(:lower) } end # 2. 处理你的整体数据结构 # your_original_hash 就是你提到的 {KEY1=>[模型数组], KEY2=>[模型数组]} 原始数据 formatted_data = your_original_hash.transform_values do |model_array| model_array.map { |model| convert_model_to_camel(model) } end # 3. 直接返回JSON给前端即可 render json: formatted_data
补充说明
- 如果你需要全局配置Rails所有JSON返回都自动转小驼峰,可以在
config/initializers/json.rb中添加如下配置,之后所有序列化操作都会自动转换键名:
ActiveSupport::JSON::Encoding.camelize_keys = :lower
- 若你使用Jbuilder序列化JSON,也可以在模板中直接调用
json.camelize! :lower实现当前模板的驼峰转换,无需手动处理每个键。
内容的提问来源于stack exchange,提问作者Abhishek P
相关产品推荐
相关产品推荐

