Форум сайта python.su
Я новичок в питоне и хотел бы разобраться с проблемой парсинга json ответа, может быть кто-то подскажет мне другое решение.
Вот мой код
import requests import json ######################## URL Endpoints ######################## url_sandbox = 'https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest' ############# Authentication ont the web-server ############### auth_sandbox = { 'sort': 'market_cap', 'start': '1', 'limit': '3', 'cryptocurrency_type': 'all', 'convert': 'USD', 'CMC_PRO_API_KEY': 'XXXXX-YYYY-4492-PPPP-ZSDSIQWEUD' } # dict to authenticate on a test environment ######### Getting top 100 Crypto from the Coinmarket ############ auth = requests.get(url_sandbox, params=auth_sandbox) cryptocurrency_list = json.loads(auth.content) print(cryptocurrency_list) print(type(cryptocurrency_list))
{ "status": { "timestamp": "2019-01-18T14:15:23.429Z", "error_code": 0, "error_message": null, "elapsed": 6, "credit_count": 1 }, "data": [ { "id": 1, "name": "Bitcoin", "symbol": "BTC", "slug": "bitcoin", "circulating_supply": 17435912, "total_supply": 17435912, "max_supply": 21000000, "date_added": "2013-04-28T00:00:00.000Z", "num_market_pairs": 6695, "tags": [ "mineable" ], "platform": null, "cmc_rank": 1, "last_updated": "2018-12-22T06:08:23.000Z", "quote": { "USD": { "price": 3881.88864625, "volume_24h": 6341959230.33247, "percent_change_1h": 0.426252, "percent_change_24h": -4.10839, "percent_change_7d": 19.472, "market_cap": 67684268829.81413, "last_updated": "2018-12-22T06:08:23.000Z" } } }, { "id": 52, "name": "XRP", "symbol": "XRP", "slug": "ripple", "circulating_supply": 40794121066, "total_supply": 99991738974, "max_supply": 100000000000, "date_added": "2013-08-04T00:00:00.000Z", "num_market_pairs": 307, "tags": [], "platform": null, "cmc_rank": 2, "last_updated": "2018-12-22T06:08:03.000Z", "quote": { "USD": { "price": 0.353610065729, "volume_24h": 617573458.768739, "percent_change_1h": 0.712268, "percent_change_24h": -3.66051, "percent_change_7d": 22.3608, "market_cap": 14425211831.505043, "last_updated": "2018-12-22T06:08:03.000Z" } } }, { "id": 1027, "name": "Ethereum", "symbol": "ETH", "slug": "ethereum", "circulating_supply": 103938514.4366, "total_supply": 103938514.4366, "max_supply": null, "date_added": "2015-08-07T00:00:00.000Z", "num_market_pairs": 4792, "tags": [ "mineable" ], "platform": null, "cmc_rank": 3, "last_updated": "2018-12-22T06:08:17.000Z", "quote": { "USD": { "price": 108.4856134, "volume_24h": 2315879861.38542, "percent_change_1h": 0.540547, "percent_change_24h": -4.84225, "percent_change_7d": 28.202, "market_cap": 11275833494.539307, "last_updated": "2018-12-22T06:08:17.000Z" } } } ] }
{u'status': {u'credit_count': 1, u'timestamp': u'2019-01-18T14:17:39.133Z', u'error_message': None, u'error_code': 0, u'elapsed': 7}, u'data': [{u'last_updated': u'2018-12-22T06:08:23.000Z', u'platform': None, u'name': u'Bitcoin', u'tags': [u'mineable'], u'quote': {u'USD': {u'market_cap': 67684268829.81413, u'last_updated': u'2018-12-22T06:08:23.000Z', u'percent_change_7d': 19.472, u'price': 3881.88864625, u'percent_change_24h': -4.10839, u'volume_24h': 6341959230.33247, u'percent_change_1h': 0.426252}}, u'symbol': u'BTC', u'slug': u'bitcoin', u'total_supply': 17435912, u'num_market_pairs': 6695, u'max_supply': 21000000, u'circulating_supply': 17435912, u'cmc_rank': 1, u'date_added': u'2013-04-28T00:00:00.000Z', u'id': 1}, {u'last_updated': u'2018-12-22T06:08:03.000Z', u'platform': None, u'name': u'XRP', u'tags': [], u'quote': {u'USD': {u'market_cap': 14425211831.505043, u'last_updated': u'2018-12-22T06:08:03.000Z', u'percent_change_7d': 22.3608, u'price': 0.353610065729, u'percent_change_24h': -3.66051, u'volume_24h': 617573458.768739, u'percent_change_1h': 0.712268}}, u'symbol': u'XRP', u'slug': u'ripple', u'total_supply': 99991738974, u'num_market_pairs': 307, u'max_supply': 100000000000, u'circulating_supply': 40794121066, u'cmc_rank': 2, u'date_added': u'2013-08-04T00:00:00.000Z', u'id': 52}, {u'last_updated': u'2018-12-22T06:08:17.000Z', u'platform': None, u'name': u'Ethereum', u'tags': [u'mineable'], u'quote': {u'USD': {u'market_cap': 11275833494.539307, u'last_updated': u'2018-12-22T06:08:17.000Z', u'percent_change_7d': 28.202, u'price': 108.4856134, u'percent_change_24h': -4.84225, u'volume_24h': 2315879861.38542, u'percent_change_1h': 0.540547}}, u'symbol': u'ETH', u'slug': u'ethereum', u'total_supply': 103938514.4366, u'num_market_pairs': 4792, u'max_supply': None, u'circulating_supply': 103938514.4366, u'cmc_rank': 3, u'date_added': u'2015-08-07T00:00:00.000Z', u'id': 1027}]} <type 'dict'>
Отредактировано Goldberg (Янв. 18, 2019 16:48:02)
Офлайн
Офлайн
Вопрос решился благодаря добрым людям телеграм канала.
В общем не нужно было изобретать велосипед.
Проблемы по сути и не было, каждая секция рассматривается как один элемент массива и можно было бы обратиться по индексу,
print(cryptocurrency_list['data'][1])
for crypt in cryptocurrency_list['data']: if crypt['name'] == 'XRP': print crypt.get('num_market_pairs')
Офлайн
можно и так, если надо понять где что в json я пользую допиленный вариант
def flatten2(obj): out = [] def flatten(obj,keys='[',delim='][',): if type(obj) is dict and obj: for key in obj: flatten(obj[key], keys + repr(key) + delim) elif type(obj) is list and obj: for i,item in enumerate(obj): flatten(item, keys + repr(i) + delim) else: out.append([keys[:-1],obj]) flatten(obj) return out f = flatten2(d) for k,v in f : print(k,'=>',v)
['status']['timestamp'] => 2019-01-18T14:15:23.429Z ['status']['error_code'] => 0 ['status']['error_message'] => None ['status']['elapsed'] => 6 ['status']['credit_count'] => 1 ['data'][0]['id'] => 1 ['data'][0]['name'] => Bitcoin ['data'][0]['symbol'] => BTC ['data'][0]['slug'] => bitcoin ['data'][0]['circulating_supply'] => 17435912 ['data'][0]['total_supply'] => 17435912 ['data'][0]['max_supply'] => 21000000 ['data'][0]['date_added'] => 2013-04-28T00:00:00.000Z ['data'][0]['num_market_pairs'] => 6695 ['data'][0]['tags'][0] => mineable ['data'][0]['platform'] => None ['data'][0]['cmc_rank'] => 1 ['data'][0]['last_updated'] => 2018-12-22T06:08:23.000Z ['data'][0]['quote']['USD']['price'] => 3881.88864625 ['data'][0]['quote']['USD']['volume_24h'] => 6341959230.33247 ['data'][0]['quote']['USD']['percent_change_1h'] => 0.426252 ['data'][0]['quote']['USD']['percent_change_24h'] => -4.10839 ['data'][0]['quote']['USD']['percent_change_7d'] => 19.472 ['data'][0]['quote']['USD']['market_cap'] => 67684268829.81413 ['data'][0]['quote']['USD']['last_updated'] => 2018-12-22T06:08:23.000Z ['data'][1]['id'] => 52 ['data'][1]['name'] => XRP ['data'][1]['symbol'] => XRP ['data'][1]['slug'] => ripple ['data'][1]['circulating_supply'] => 40794121066 ['data'][1]['total_supply'] => 99991738974 ['data'][1]['max_supply'] => 100000000000 ['data'][1]['date_added'] => 2013-08-04T00:00:00.000Z ['data'][1]['num_market_pairs'] => 307 ['data'][1]['tags'] => [] ['data'][1]['platform'] => None ['data'][1]['cmc_rank'] => 2 ['data'][1]['last_updated'] => 2018-12-22T06:08:03.000Z ['data'][1]['quote']['USD']['price'] => 0.353610065729 ['data'][1]['quote']['USD']['volume_24h'] => 617573458.768739 ['data'][1]['quote']['USD']['percent_change_1h'] => 0.712268 ['data'][1]['quote']['USD']['percent_change_24h'] => -3.66051 ['data'][1]['quote']['USD']['percent_change_7d'] => 22.3608 ['data'][1]['quote']['USD']['market_cap'] => 14425211831.505043 ['data'][1]['quote']['USD']['last_updated'] => 2018-12-22T06:08:03.000Z ['data'][2]['id'] => 1027 ['data'][2]['name'] => Ethereum ['data'][2]['symbol'] => ETH ['data'][2]['slug'] => ethereum ['data'][2]['circulating_supply'] => 103938514.4366 ['data'][2]['total_supply'] => 103938514.4366 ['data'][2]['max_supply'] => None ['data'][2]['date_added'] => 2015-08-07T00:00:00.000Z ['data'][2]['num_market_pairs'] => 4792 ['data'][2]['tags'][0] => mineable ['data'][2]['platform'] => None ['data'][2]['cmc_rank'] => 3 ['data'][2]['last_updated'] => 2018-12-22T06:08:17.000Z ['data'][2]['quote']['USD']['price'] => 108.4856134 ['data'][2]['quote']['USD']['volume_24h'] => 2315879861.38542 ['data'][2]['quote']['USD']['percent_change_1h'] => 0.540547 ['data'][2]['quote']['USD']['percent_change_24h'] => -4.84225 ['data'][2]['quote']['USD']['percent_change_7d'] => 28.202 ['data'][2]['quote']['USD']['market_cap'] => 11275833494.539307 ['data'][2]['quote']['USD']['last_updated'] => 2018-12-22T06:08:17.000Z
Отредактировано vic57 (Янв. 18, 2019 20:23:32)
Офлайн
vic57
можно и так, если надо понять где что в json я пользую допиленный вариант
for crypt in cryptocurrency_list['data']: if crypt['name'] == 'XRP': print crypt.get('num_market_pairs')
Офлайн
None - значит такого ключа нет
f = flatten2(d['data']) for k,v in f : if 'name' in k or 'price' in k: print(k,'=>',v)
[0]['name'] => Bitcoin [0]['quote']['USD']['price'] => 3881.88864625 [1]['name'] => XRP [1]['quote']['USD']['price'] => 0.353610065729 [2]['name'] => Ethereum [2]['quote']['USD']['price'] => 108.4856134
Офлайн
vic57точно, какой я невнимательный, я не правильно задал путь к ключу
None - значит такого ключа нет
Офлайн