ActiveModel::Serializers::JSON-如何将JSON数组从返回的字符串映射到Ruby对象集合
我的代码只适用于单个实例,但我使用的API返回一个数据数组。我有一个类来封装这些数据:ActiveModel::Serializers::JSON-如何将JSON数组从返回的字符串映射到Ruby对象集合,ruby,active-model-serializers,activemodel,Ruby,Active Model Serializers,Activemodel,我的代码只适用于单个实例,但我使用的API返回一个数据数组。我有一个类来封装这些数据: class Brewery include ActiveModel::Serializers::JSON attr_accessor :id, :name def attributes=(hash) hash.each { |key, value| send("#{key}=", value) } end def attributes instance_values
class Brewery
include ActiveModel::Serializers::JSON
attr_accessor :id, :name
def attributes=(hash)
hash.each { |key, value| send("#{key}=", value) }
end
def attributes
instance_values
end
end
返回的数据与此类似
[
{
"id": 2,
"name": "Avondale Brewing Co"
},
{
"id": 44,
"name": "Trim Tab Brewing"
}
]
我可以使用如下代码将单个JSON哈希封送到类:
brewery = Brewery.new
brewery.from_json(single_brewery)
但是,这不适用于阵列。我对Ruby比较陌生,所以我不太确定要使用什么函数,或者至少要完成JSON哈希到一个数组,我可以从_JSON映射
这个可以工作,但看起来很笨重
breweries = JSON.parse(brewery_list).map { |b|
brewery = Brewery.new
brewery.from_json(b.to_json)
}
我不确定为什么你会觉得映射数组很笨拙,但你可能会把你的酿酒厂
变成一个工厂
class啤酒厂
...
def self.many(啤酒厂列表)
parse(brewery_列表)。
映射(&:to_json)。
map(&Brewery.new.method)(:from_json)
结束
结束
像这样使用它
breweries=Brewery.many(啤酒厂列表)
我开始写一个答案,说明如何在代码<> ActudioMeDel::SerialZiS::JSON/COD>模块中满足您的需要,但老实说,我建议您只写自己的模块,因为功能不那么复杂,听起来好像您已经知道您需要什么了,更重要的是不得不调用JSON.PAR。se to然后在同一个调用中调用_json,然后再调用from_json,感觉不太对。如果是这样做的话,就是这样做的。