Вы можете попробовать этот код и обратную связь, пожалуйста:)
<h1>LISTING </h1>
<% @jsonData.fetch('data', {}).each do |id, coin| %>
Name: <%= coin['name'] %> <br />
Symbol: <%= coin['symbol'] %> <br />
Website_slug: <%= coin['website_slug'] %> <br />
Rank: <%= coin['rank'] %> <br />
Circulating_supply: <%= coin['circulating_supply'] %> <br />
total_supply: <%= coin['total_supply'] %> <br />
max_supply: <%= coin['max_supply'] %> <br />
Price: <%= coin.dig('quotes', 'USD', 'price') %> <br />
Volume24h: <%= coin.dig('quotes', 'USD', 'volume_24h') %> <br />
Market_cap: <%= coin.dig('quotes', 'USD', 'market_cap') %> <br />
Change_1he: <%= coin.dig('quotes', 'USD', 'pricpercent_change_1he') %> <br />
Change_24h: <%= coin.dig('quotes', 'USD', 'percent_change_24h') %> <br />
Change_7d: <%= coin.dig('quotes', 'USD', 'percent_change_7d') %> <br />
<%end%>
<%end%>
Это образец вашего JSON:
{
"data":{
"1":{
"id":1,
"name":"Bitcoin",
"symbol":"BTC",
"website_slug":"bitcoin",
"rank":1,
"circulating_supply":17298850.0,
"total_supply":17298850.0,
"max_supply":21000000.0,
"quotes":{
"USD":{
"price":6592.56514166,
"volume_24h":3990509859.95985,
"market_cap":114043795501.0,
"percent_change_1h":-0.31,
"percent_change_24h":-0.36,
"percent_change_7d":-0.61
}
},
"last_updated":1538393012
},
"1027":{
"id":1027,
"name":"Ethereum",
"symbol":"ETH",
"website_slug":"ethereum",
"rank":2,
"circulating_supply":102298658.0,
"total_supply":102298658.0,
"max_supply":null,
"quotes":{
"USD":{
"price":229.147840966,
"volume_24h":1701049487.13546,
"market_cap":23441516679.0,
"percent_change_1h":-0.8,
"percent_change_24h":-2.56,
"percent_change_7d":-2.44
}
},
"last_updated":1538393021
},
"52":{
"id":52,
"name":"XRP",
"symbol":"XRP",
"website_slug":"ripple",
"rank":3,
"circulating_supply":39870907279.0,
"total_supply":99991836919.0,
"max_supply":100000000000.0,
"quotes":{
"USD":{
"price":0.5790784377,
"volume_24h":1229031882.79177,
"market_cap":23088382697.0,
"percent_change_1h":-1.6,
"percent_change_24h":-4.58,
"percent_change_7d":7.96
}
},
"last_updated":1538393043
},
"1831":{
"id":1831,
"name":"Bitcoin Cash",
"symbol":"BCH",
"website_slug":"bitcoin-cash",
"rank":4,
"circulating_supply":17378475.0,
"total_supply":17378475.0,
"max_supply":21000000.0,
"quotes":{
"USD":{
"price":532.361000338,
"volume_24h":480935803.85542,
"market_cap":9251622335.0,
"percent_change_1h":-0.78,
"percent_change_24h":-1.57,
"percent_change_7d":13.15
}
},
"last_updated":1538393013
},
"1765":{
"id":1765,
"name":"EOS",
"symbol":"EOS",
"website_slug":"eos",
"rank":5,
"circulating_supply":906245118.0,
"total_supply":1006245120.0,
"max_supply":null,
"quotes":{
"USD":{
"price":5.6494577239,
"volume_24h":822687391.374753,
"market_cap":5119793479.0,
"percent_change_1h":-0.53,
"percent_change_24h":-3.01,
"percent_change_7d":-1.66
}
},
"last_updated":1538393011
},
"512":{
"id":512,
"name":"Stellar",
"symbol":"XLM",
"website_slug":"stellar",
"rank":6,
"circulating_supply":18789958255.0,
"total_supply":104323820467.0,
"max_supply":null,
"quotes":{
"USD":{
"price":0.261922298,
"volume_24h":67633971.9905846,
"market_cap":4921509046.0,
"percent_change_1h":0.14,
"percent_change_24h":1.03,
"percent_change_7d":-0.49
}
},
"last_updated":1538392997
},
"2":{
"id":2,
"name":"Litecoin",
"symbol":"LTC",
"website_slug":"litecoin",
"rank":7,
"circulating_supply":58532552.0,
"total_supply":58532552.0,
"max_supply":84000000.0,
"quotes":{
"USD":{
"price":60.7806370254,
"volume_24h":461333051.026648,
"market_cap":3557645805.0,
"percent_change_1h":-0.07,
"percent_change_24h":-1.17,
"percent_change_7d":4.09
}
}
}
}
}
После этого json вы можете видеть, что нет массивов []
, это просто вложенные хэши {}
, поэтому вам не нужны все ваши циклы.Напримерчтобы получить цену, вам нужно сделать что-то вроде: @jsonData['data']['1']['quotes']['USD']['price']
Этот путь ['data']['1']['quotes']['USD']['price']
полностью статичен, что означает, что он будет одинаковым для каждого coin
.единственная динамическая / изменяющаяся часть - ['1']
.Иногда это будет ['1']
, ['1027']
, ['52']
и т. Д.
Так что в моем коде вы можете видеть, что я получаю доступ ко всем данным статически, но только для IDs
, который мне пришлось зациклитьнад ним, но этот цикл будет больше key => value
, потому что, как упоминалось ранее, мы имеем дело с хэшами, а не массивами.
Итак, когда я сделал <% @jsonData.fetch('data', {}).each do |id, coin| %>
:
id
имеетзначение '1'
. coin
имеет структуру монеты (вы можете статически извлечь любой фрагмент данных, например coin.dig('quotes', 'USD', 'price')
, например,
Что вы гдеделать:
<% @jsonData.['data'].each do |coin| %>
:
coin
будет ['1', 'structure of the coin here']
- , когда вы сделаете
coin['name']
, это вернет ноль, но не потерпит неудачуВ этот момент вы думали, что это работает, но это не так.