【问题标题】:Iterating through a array of hashes in Ruby (parsed JSON)遍历 Ruby 中的哈希数组(解析 JSON)
【发布时间】:2018-09-25 02:42:24
【问题描述】:

我有这个哈希数组,它是在执行 API 调用并通过 JSON.parse 运行时创建的:

{
  "results": [
    {
      "zip": "08225",
      "city": "Northfield",
      "county": "Atlantic",
      "state": "NJ",
      "distance": "0.0"
    },
    {
      "zip": "08221",
      "city": "Linwood",
      "county": "Atlantic",
      "state": "NJ",
      "distance": "1.8"
    }
  ]
}

我正在尝试从每个对象中获取所有邮政编码并将它们放入一个数组中:

zipcode_array = Array.new

我已经尝试了以下代码:

locations.each do |zipcode|
    zipcode_array.push(['results'][i]['zip'])
end

我希望我的最终输出是:

zipcode_array = ["08225", "08221"]

有人对我缺少什么有任何提示吗?

【问题讨论】:

  • 提示:您可以在 Ruby 中使用 [ ] 来创建一个新的空数组,而不是冗长的 Java 风格 Array.newArray.new 被保存用于特殊场合,例如 Array.new(10,0),当您想要一个具有特定预定义大小和(可选)默认值的数组时。

标签: arrays json ruby object each


【解决方案1】:

您的代码似乎缺少i 变量(索引),但实际上您并不需要它,因为您始终可以使用map 函数来实现地道的Ruby 代码:

require "json"

response = '{
  "results": [
    {
      "zip": "08225",
      "city": "Northfield",
      "county": "Atlantic",
      "state": "NJ",
      "distance": "0.0"
    },
    {
      "zip": "08221",
      "city": "Linwood",
      "county": "Atlantic",
      "state": "NJ",
      "distance": "1.8"
    }
  ]
}'

parsed_response = JSON.parse(response)
zipcode_array = parsed_response["results"].map { |address| address["zip"] }

【讨论】:

    【解决方案2】:

    你可以使用map函数来代替each来实现这一点。

    response[:results].map{|x| x[:zip]}
    

    这将为您提供数组中的结果,即

    ["08225", "08221"]
    

    【讨论】:

    • 你一个一个地迭代
    • 是的,没错。感谢您指出iterating 这个词。编辑了我的答案。 map 会给你一个新数组,而不是创建一个新数组并推入它。
    • 这通常是正确的想法,但 JSON 哈希将只有字符串键,没有符号,至少没有转换。
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2014-04-03
    • 2016-09-03
    相关资源
    最近更新 更多