我有一个带有一些参数的类,我希望使用来自JSON文件的数据来填充这些参数

时间:2015-01-02 00:30:06

标签: ruby json

我正在尝试创建一个有趣的垄断管理器,我有一个JSON文件中所有tile的数据,我想用它来迭代并用于数据。我目前有这个代码:

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文件为in this gist

我无法弄清楚如何使用JSON数据来创建更多属性,我在数据上使用for循环,data.each尝试自动生成类似的内容:

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
)

但是我无法理解如何做到这一点,任何帮助都将受到高度赞赏!

1 个答案:

答案 0 :(得分:2)

您可以使用each生成Property对象并将它们收集到一个数组中。

properties = []
data.each { |property| properties << Property.new(property) }

然后,您可以根据需要使用select从阵列中访问各个属性。

properties.select { |property| property.name == "Parkveien" }    

此外,由于数据哈希中的键是字符串,因此您需要更改初始化以使用字符串而不是符号:

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