【问题标题】:iterate through an array of hashes in JSON format from API从 API 遍历 JSON 格式的哈希数组
【发布时间】:2020-12-11 09:15:23
【问题描述】:

我正在尝试遍历从 API 收到的 JSON 格式的哈希数组。当我在数组上调用 .each 时,它会深入到第一个元素而不是显示所有元素。数组的前两个元素如下所示:

[
  {
    "asset_id": "USD",
    "name": "US Dollar",
    "type_is_crypto": 0,
    "data_start": "2010-07-17",
    "data_end": "2020-08-22",
    "data_quote_start": "2014-02-24T17:43:05.0000000Z",
    "data_quote_end": "2020-08-22T01:06:58.9597860Z",
    "data_orderbook_start": "2014-02-24T17:43:05.0000000Z",
    "data_orderbook_end": "2020-08-05T14:38:00.7082850Z",
    "data_trade_start": "2010-07-17T23:09:17.0000000Z",
    "data_trade_end": "2020-08-22T01:19:43.1640000Z",
    "data_symbols_count": 26852,
    "volume_1hrs_usd": 2321607499673.51,
    "volume_1day_usd": 40908494876832.76,
    "volume_1mth_usd": 1714490806719560.56,
    "id_icon": "0a4185f2-1a03-4a7c-b866-ba7076d8c73b"
  },
  {
    "asset_id": "BTC",
    "name": "Bitcoin",
    "type_is_crypto": 1,
    "data_start": "2010-07-17",
    "data_end": "2020-08-22",
    "data_quote_start": "2014-02-24T17:43:05.0000000Z",
    "data_quote_end": "2020-08-22T01:07:19.9866602Z",
    "data_orderbook_start": "2014-02-24T17:43:05.0000000Z",
    "data_orderbook_end": "2020-08-05T14:38:38.3413202Z",
    "data_trade_start": "2010-07-17T23:09:17.0000000Z",
    "data_trade_end": "2020-08-22T01:19:41.0000000Z",
    "data_symbols_count": 37490,
    "volume_1hrs_usd": 2608619355599.04,
    "volume_1day_usd": 1026744793672216.61,
    "volume_1mth_usd": 1229382556627007157.08,
    "price_usd": 11430.971377648230409771335978,
    "id_icon": "4caf2b16-a017-4e26-a348-2cea69c34cba"
  },

我的代码如下所示:

ticker.each do |currencies| 
            currencies.each do |key, value|
                puts "#{key} #{value}"
            end
        end

我希望将“货币”中的每个元素及其每个属性作为键/值对来分配变量。但是,当我窥探这个块并检查“货币”返回的内容时,它只是第一个元素和它的 17 个哈希,而不是其他 9000 个元素。我希望这很清楚,任何帮助表示赞赏。

【问题讨论】:

  • 那么ticker是你的9000种货币的数组吗?你的程序输出什么?当您说“货币”返回时,我不确定您的意思。 “货币”不是函数或方法。也许您可以发布一些具有更多上下文的代码?也许 pry session 的输出会有所帮助。
  • 我只是将你的哈希值分配给一个股票变量,它工作正常。并且ticker.count 也向我显示2. 在这种情况下是预期的。您可以将其写入日志或在控制台上打印。检查您是否正确获取所有货币。
  • 请提供一个较小的哈希模型,并清楚说明您的预期结果是什么。

标签: arrays json ruby api hash


【解决方案1】:

认为你想要currencies.each_pair 而不是currencies.each... each 方法遍历 ticker 数组,依次将每个条目传递给块。仅仅因为你给了currencies 一个复数名称,它并不会自动使它成为一个数组,它仍然是一个包含单个货币的 17 个属性的哈希,每次循环。

ticker.each do |currency|
  currency.each_pair { |key, value| puts "#{key}: #{value}" }
end

【讨论】:

    【解决方案2】:

    在股票代码上尝试 .with_index

    
    
      ticker.each_with_index do |currencies, index|
         puts index.to_s + ': {' 
      
        currencies.each do |key, value|
        puts  "#{key}: #{value}" 
        end
        
        puts '}'
      end
    
    

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 1970-01-01
      • 2012-08-22
      • 2018-09-25
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多