Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ActiveModel::Serializers::JSON-如何将JSON数组从返回的字符串映射到Ruby对象集合_Ruby_Active Model Serializers_Activemodel - Fatal编程技术网

ActiveModel::Serializers::JSON-如何将JSON数组从返回的字符串映射到Ruby对象集合

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

我的代码只适用于单个实例,但我使用的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
  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,感觉不太对。如果是这样做的话,就是这样做的。