0

私は次のようなJSONを読んでいます:

[
  {
    "Low": 8.63,
    "Volume": 14211900,
    "Date": "2012-10-26",
    "High": 8.79,
    "Close": 8.65,
    "Adj Close": 8.65,
    "Open": 8.7
  },
  {
    "Low": 8.65,
    "Volume": 12167500,
    "Date": "2012-10-25",
    "High": 8.81,
    "Close": 8.73,
    "Adj Close": 8.73,
    "Open": 8.76
  },
  {
    "Low": 8.68,
    "Volume": 20239700,
    "Date": "2012-10-24",
    "High": 8.92,
    "Close": 8.7,
    "Adj Close": 8.7,
    "Open": 8.85
  },
  {
    "Low": 8.78,
    "Volume": 23433900,
    "Date": "2012-10-23",
    "High": 8.94,
    "Close": 8.78,
    "Adj Close": 8.78,
    "Open": 8.93
  }
]

これを使用する:

json = File.read("#{symbols[0]}.json")

次にこれを行う:

result = JSON.parse(json)

次に、キー値「低」の最初の値を選択するときに、次のようにしました。

puts result[0]['Low']

これは58.75(正しい)を返しました。

しかし、「低」の最初の3つの値を取得したいと思います。次のことを試してみましたが、機能しません(文字列を整数に変換できないと言います)。なんで?

puts result[0..2]['Low']
4

3 に答える 3

1
results = [
  {"Low"=>58.75, "Volume"=>163200, "Date"=>"1962-02-01", "High"=>59.63, "Close"=>59.38, "Adj Close"=>0.61, "Open"=>59.63},
  {"Low"=>59.63, "Volume"=>134400, "Date"=>"1962-01-31", "High"=>60.0, "Close"=>59.75, "Adj Close"=>0.62, "Open"=>59.88},
  {"Low"=>59.13, "Volume"=>91200, "Date"=>"1962-01-26", "High"=>59.38, "Close"=>59.38, "Adj Close"=>0.61, "Open"=>59.13},
  {"Low"=>59.13, "Volume"=>91200, "Date"=>"1962-01-25", "High"=>59.88, "Close"=>59.13, "Adj Close"=>0.61, "Open"=>59.75},
  {"Low"=>58.5, "Volume"=>110400, "Date"=>"1962-01-24", "High"=>60.13, "Close"=>59.75, "Adj Close"=>0.62, "Open"=>60.13}
]
results[0..2].collect {|element| element['Low']}
>> [58.75, 59.63, 59.13]
于 2012-10-29T09:31:08.950 に答える
0

うまくいかない理由は、

  • results[0]単一のハッシュを返します (その後、文字列でインデックス付けできます['key'])
  • results[0..2]別の (より小さい) ハッシュの配列を返します (単一のハッシュを取得するには、整数でインデックスを付ける必要があります)。

map関数 ( docs )を使用すると、目的の値を取得できます。エイリアスが付けられてcollectいるため、好きなものを使用できます。この場合、一連の値を収集しているため、それが概念的に最も適している可能性があります。

results[0..2].map {|hash| hash['Low']}
# or equivalently
results[0..2].collect {|hash| hash['Low']}
于 2012-10-29T09:48:46.113 に答える
0

ハッシュの配列があると仮定すると、これを行うことができます:

results = [
  {"Low"=>58.75, "Volume"=>163200, "Date"=>"1962-02-01", "High"=>59.63, "Close"=>59.38, "Adj Close"=>0.61, "Open"=>59.63},
  {"Low"=>59.63, "Volume"=>134400, "Date"=>"1962-01-31", "High"=>60.0, "Close"=>59.75, "Adj Close"=>0.62, "Open"=>59.88},
  {"Low"=>59.13, "Volume"=>91200, "Date"=>"1962-01-26", "High"=>59.38, "Close"=>59.38, "Adj Close"=>0.61, "Open"=>59.13},
  {"Low"=>59.13, "Volume"=>91200, "Date"=>"1962-01-25", "High"=>59.88, "Close"=>59.13, "Adj Close"=>0.61, "Open"=>59.75},
  {"Low"=>58.5, "Volume"=>110400, "Date"=>"1962-01-24", "High"=>60.13, "Close"=>59.75, "Adj Close"=>0.62, "Open"=>60.13}
]

(0..2).map {|idx| results[idx]['Low']} # => [58.75, 59.63, 59.13]
于 2012-10-29T09:29:07.463 に答える