【问题标题】:ruby import json data红宝石导入json数据
【发布时间】:2018-05-11 08:50:48
【问题描述】:

如何在 main.rb 文件中使用 data.rb 文件中的解析数据?

我正在尝试计算“2017”这一年出现的次数,以及“2014”出现的次数。

我想将两个计数都返回到 main.rb 中的方法 count_years。这是如何正确完成的?

ma​​in.rb

def count_years
File.open('data.rb'))[:phone_data]
    if :phone_data."Year" == 2017
       year_2017.count #new variable year_2017
    end
    if :phone_data."Year" == 2014
       year_2014.count #new variable year_2014
    end
end

data.rb

let(:phone_data) {
  JSON.parse('[
{
  "Phone": "iPhone 6",
  "Year": "2014"
},
{
  "Phone": "iPhone 7",
  "Year": "2016"

},
{
  "Car": "iPhone 8",
  "Year": "2017"
},
{
  "Car": "Galaxy S8",
  "Year": "2017"
}

]')
}

ma​​in.rb

【问题讨论】:

  • 你第三个账号又问了同样的问题?您甚至忘记在最后两个数组元素中将“汽车”更改为“电话”。

标签: arrays json ruby


【解决方案1】:

data.rb 文件设置为供 RSpec 使用。即使在这种情况下,也有点尴尬。我会将 JSON 数据移动到 JSON 文件,然后您可以从这两个地方访问它。还有其他选择,但我需要更多地了解您的应用程序以及您如何以及在何处使用这些数据。

data.json:

[
  {
    "Phone": "iPhone 6",
    "Year": "2014"
  },
  {
    "Phone": "iPhone 7",
    "Year": "2016"
  },
  {
    "Car": "iPhone 8",
    "Year": "2017"
  },
  {
    "Car": "Galaxy S8",
    "Year": "2017"
  }
]

data.rb:

require 'json'

let(:phone_data) {
  JSON.parse(File.read('data.json'))
}

main.rb:

require 'json'

def count_years
  JSON.parse(File.read('data.json'))
    .group_by { |h| h['Year'] }
    .map { |year, entries| [year, entries.size] }
    .to_h
end

该方法将返回一个哈希值,其中键是年份,值是计数:

count_years # => {"2014"=>1, "2016"=>1, "2017"=>2}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多