【问题标题】:How to extract a value from a hash如何从哈希中提取值
【发布时间】:2020-07-21 18:40:09
【问题描述】:

我有一个包含哈希的解析 JSON 文件:

{
  "user1" : {
    "about_you" : "jjhj",
    "age" : 18,
    "email" : 18
   },
  "user2" : {
    "about_you" : "jjhj",
    "age" : 18,
    "email" : 18
   },
  "user3" : {
    "about_you" : "jjhj",
    "age" : 18,
    "email" : 18
   }
}

我正在尝试循环获取所有电子邮件值并将它们写入 CSV 文件。

目前我正在尝试阅读电子邮件,并尝试了一些变体,但这是我得到的最接近的,但它没有读取值,它只是显示空白。

data_hash = JSON.parse(File.read('user.json'))

data_hash.keys.each do |user|
  puts user['email']
end

【问题讨论】:

  • 您的问题实际上是关于从哈希中提取值。数据以 JSON 开头并不重要,因为当您读取和解析它时,它不再是 JSON,而是散列。因此,在询问时,请务必将问题、问题和标签简化为实际涉及的内容。除此之外的任何事情都只会引起混乱。请查看“How to Ask”、“Stack Overflow question checklist”及其所有链接页面。

标签: ruby hashmap


【解决方案1】:

如果您只需要电子邮件数据,那么您可以使用map

data_hash = JSON.parse(File.read('user.json'))
data_hash.values.map{|x| x[:email]}

【讨论】:

    【解决方案2】:

    keys 方法returns an array of the key names;它不返回值。

    鉴于这些输入:

    json = '{"user1":{"about_you":"jjhj","age":18,"email":18},"user2":{"about_you":"jjhj","age":18,"email":18},"user3":{"about_you":"jjhj","age":18,"email":18}}'
    data_hash = JSON.parse(json)
    

    尝试只迭代哈希的键和值:

    data_hash.each { |k,v| puts v['email'] }
    

    或者,如果您愿意:

    data_hash.each do |k,v|
      puts v['email']
    end
    

    每个回报:

    18
    18
    18
    

    【讨论】:

    • 如果我想检查电子邮件字段是否存在怎么办?我试过 if v['email'] 但这并没有让我到任何地方,还尝试使用.key?但那是死胡同。有些对象不包含电子邮件,所以想在打印之前先检查一下?
    • puts v['email'] if v.key?('email')
    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2018-02-27
    • 2013-01-23
    • 2021-02-20
    相关资源
    最近更新 更多