Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/27.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
Ruby 我有一个带有一些参数的类,我';I’我希望使用JSON文件中的数据进行填充_Ruby_Json - Fatal编程技术网

Ruby 我有一个带有一些参数的类,我';I’我希望使用JSON文件中的数据进行填充

Ruby 我有一个带有一些参数的类,我';I’我希望使用JSON文件中的数据进行填充,ruby,json,Ruby,Json,我正在尝试创建一个垄断管理器以获得乐趣,我在一个JSON文件中拥有所有分片的数据,我想用它来迭代并用于数据。我目前有以下代码: require 'json' file = File.read('monopoly-data.json') data_hash = JSON.parse(file) data = data_hash['properties'].sort_by{ |e| e['id'].to_i } class Property attr_accessor :id, :group

我正在尝试创建一个垄断管理器以获得乐趣,我在一个JSON文件中拥有所有分片的数据,我想用它来迭代并用于数据。我目前有以下代码:

require 'json'

file = File.read('monopoly-data.json')
data_hash = JSON.parse(file)
data = data_hash['properties'].sort_by{ |e| e['id'].to_i }

class Property
  attr_accessor :id, :group, :colour, :name, :price, :rent, :house_price, :mortage

  def initialize(params = {})
    @id = params[:id]
    @group = params[:group]
    @colour = params[:colour]
    @name = params[:name]
    @price = params[:price]
    @rent = params[:rent]
    @house_price = params[:house_price]
    @mortage = params[:mortage]
  end
end
JSON文件是

我还没有弄明白如何使用JSON数据来生成更多属性,我一直在使用数据上的
for
循环,
数据。每个
都试图自动生成这样的内容:

parkveien = Property.new(
  id: 1,
  group: 'property',
  colour: 'brown',
  name: 'Parkveien',
  price: 1200,
  rent: [40, 200, 600, 1800, 3200, 5000],
  house_price: 1000,
  mortage: 600
)

然而我就是不知道该怎么做,任何帮助都将不胜感激

您可以使用
每个
生成属性对象并将它们收集到数组中

properties = []
data.each { |property| properties << Property.new(property) }
此外,由于数据哈希中的键是字符串,因此需要将初始化更改为使用字符串而不是符号:

def initialize(params = {})
    @id = params["id"]
    @group = params["group"]
    @colour = params["colour"]
    @name = params["name"]
    @price = params["price"]
    @rent = params["rent"]
    @house_price = params["house_price"]
    @mortage = params["mortage"]
end

谢谢,明天我醒来的时候我会看一看,但我真的很感谢你抽出时间!不管怎么说,我想在睡觉前试试,而且效果很好!谢谢,你帮我省去了几个小时的头痛。
detect
方法实际上比
select
好得多,因为
detect
在返回true的第一个块停止。选择将继续进行,直到集合结束@SondreNilsenThanks@PaulRichter,效果非常好!非常感谢。
def initialize(params = {})
    @id = params["id"]
    @group = params["group"]
    @colour = params["colour"]
    @name = params["name"]
    @price = params["price"]
    @rent = params["rent"]
    @house_price = params["house_price"]
    @mortage = params["mortage"]
end