Rails:如何将对象数组的哈希值转换为json



我是一名java和Js开发人员,所以我对rails和ruby完全陌生。在我的一个项目中,我使用rails来消费api并返回到js。我正在将api响应转换为ruby中的模型。

现在的格式是{KEY1=>[{array of objects(my model)}], KEY2=>[{array of objects(my model)}]}

model的键在snake_case中。我的要求是循环遍历它,并将其转换为使用驼峰大小写键的JSON。

转换为模型后的Api响应:{ KEY1=>[{@person_name:"abc", @person_id="123"}],KEY2:[{@personName:"bca", @person_id="231"}] }

期望输出:{ KEY1:[{personName:"abc", personId:"123"}],KEY2:[{personName:"bca",personId:"231"}] }

我尝试使用。map和。transform_values直到现在,但不知道我在哪里做错了。

任何帮助都是感激的。

您可以添加以下ApplicationRecord类:

class ApplicationRecord < ActiveRecord::Base
def serializable_hash(options = {})
hash = super
return hash unless options[:camelize]
hash.deep_transform_keys { |key| key.to_s.camelize(options[:camelize]) }
end
end

这将允许你对几乎任何对象调用to_json(camelize: :lower):

{
KEY1: Person.where(...),
KEY2: Person.where(...),
}.to_json(camelize: :lower)

自动序列化整个集合

你可以这样做:

{ 
KEY1: Person.where(...).select(:name, :id).map { |p| Hash[p.serializable_hash.map { |key, value| ["#{p.model_name.name.downcase}#{key.capitalize}", value] }] }, 
KEY2: Person.where(...).select(:name, :id).map { |p| Hash[p.serializable_hash.map { |key, value| ["#{p.model_name.name.downcase}#{key.capitalize}", value] }] }
}.to_json

相关内容

  • 没有找到相关文章

最新更新