【问题标题】:Iterating through nested hashes in Ruby遍历 Ruby 中的嵌套哈希
【发布时间】:2014-10-12 09:25:02
【问题描述】:

我有一个 json 文件:

{
"public_holidays": [
{
"date": "2013/1/1",
"name": "New Years Day" 
},
{
"date": "2013/1/21",
"name": "Luther King Day"
},
{
"date": "2013/5/27",
"name": "Memorial Day"
}
]
}

我的目标是尝试捕获此文件中的所有日期。我可以获取特定索引上的日期,但不能同时获取所有日期。这是我所拥有的:

@file = File.read('public_holidays.json')

def json_file
  holiday_dates = JSON.parse(@file)
  holiday_dates.each do |key, value|
    puts value[0]['date']
  end
end

结果为 2013/1/1,但我需要所有日期,而不仅仅是一个。

有什么想法吗?

【问题讨论】:

  • 迭代公共假期。
  • 在这个特定的示例中,您可能会忘记它是 JSON,而只需使用正则表达式从字符串中提取日期:@file.scan(/\d{4}\/\d{1,2}\/\d{1,2}/) #=> ["2013/1/1", "2013/1/21", "2013/5/27"]。我不提倡这样做;我只是想指出这一点。
  • 您的 JSON 示例无效。请修复它,以便我们知道它的结构是什么。

标签: ruby json hash


【解决方案1】:

您的代码只会抓取"public_holidays" 数组中的第一个元素。

试试这样的:

holiday_dates = JSON.parse(@file)
dates = holiday_dates['public_holidays'].map { |x| x['date'] }

【讨论】:

  • 完美。这正是我所需要的,谢谢八月!我会在 6 分钟内接受(仍然有时间限制...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 2022-12-11
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多