Доступ к данным в объекте массива json

#python #json #parsing #flask

#python #json #синтаксический анализ #flask

Вопрос:

Существует структура массива, которую я получаю как json. Мне нужно получить доступ к некоторым элементам в этой структуре массива.

‘assets’: [{‘asset’: ‘USDT’,

Мне нужно получить доступ к объекту walletBalance в нем. Как я могу это сделать?

  def account_balance(webhook_data):
     account_data = client.futures_account()
     temp_account_data = json.dumps(account_data)
     test = json.loads(temp_account_data)

     for sym in test:
         print(sym['assets'])
     return account_balance
  

В приведенном выше фрагменте кода объект отображается как json, но я не могу получить доступ к содержимому «активов»

 {'feeTier': 0, 
'canTrade': True, 
'canDeposit': True, 
'canWithdraw': True, 
'updateTime': 0, 
'totalInitialMargin': '0.00000000', 
'totalMaintMargin': '0.00000000', 
'totalWalletBalance': '32.51609961', 
'totalUnrealizedProfit': '0.00000000', 
'totalMarginBalance': '32.51609961', 
'totalPositionInitialMargin': '0.00000000', 
'totalOpenOrderInitialMargin': '0.00000000', 
'maxWithdrawAmount': '32.51609961', 

'assets': 

[
{'asset': 'USDT', 
'walletBalance': '32.51609961', 
'unrealizedProfit': '0.00000000', 
'marginBalance': '32.51609961', 
'maintMargin': '0.00000000', 
'initialMargin': '0.00000000', 
'positionInitialMargin': '0.00000000', 
'openOrderInitialMargin': '0.00000000', 
'maxWithdrawAmount': '32.51609961'
},

 {'asset': 'BNB', 'walletBalance': '0.00000000', 
'unrealizedProfit': '0.00000000', 'marginBalance': '0.00000000', 
'maintMargin': '0.00000000', 'initialMargin': '0.00000000', 
'positionInitialMargin': '0.00000000', 
'openOrderInitialMargin': '0.00000000',
'maxWithdrawAmount': '0.00000000'}], 



'positions': [
{'symbol': 'EOSUSDT', 'initialMargin': '0', 'maintMargin': '0', 'unrealizedProfit': '0.00000000', 'positionInitialMargin': '0', 'openOrderInitialMargin': '0', 'leverage': '10', 'isolated': False, 'entryPrice': '0.0000', 'maxNotional': '1000000', 'positionSide': 'BOTH'}, 

{'symbol': 'SUSHIUSDT', 'initialMargin': '0', 'maintMargin': '0', 'unrealizedProfit': '0.00000000', 'positionInitialMargin': '0', 'openOrderInitialMargin': '0', 'leverage': '20', 'isolated': False, 'entryPrice': '0.0000', 'maxNotional': '25000', 'positionSide': 'BOTH'}
]}  
  

Комментарии:

1. test['assets'][0]['walletBalance']

2. большое тебе спасибо, мой друг. это сработало, можете ли вы написать в качестве ответа? Давайте подтвердим

Ответ №1:

Обратите внимание, что может быть несколько asstes, поэтому перебирайте их:

 for asset in json_data.get('assets', []):
    print(asset.get('walletBalance'))
  

Ответ №2:

Вы можете использовать понимание списка

 res = [x.get('walletBalance') for x in test['assets']]
print(res)
  

Вывод:

 ['32.51609961', '0.00000000']
  

Ответ №3:

Кажется, вы получаете словарь от вызова client.futures_account() . Если это так, дампы и загрузки не требуются. Вы можете просто сделать:

  def account_balance(webhook_data):
     account_data = client.futures_account()
     return [x.get('walletBalance') for x in account_data['assets']]