python — анализ данных json и перечисление только больших

#python #json

#python #json

Вопрос:

здравствуйте, я получаю данные json, как показано ниже. Я хочу, чтобы в данных, которые я получаю, было указано только «positionAmt» больше 0,01. Кроме того, я не могу добраться до элемента в цикле, как показано ниже. вы можете мне помочь?

  def open_positions():
     positions = json.loads(client.futures_position_information())

     for x in positions:
         print(x['symbol'])
     return positions
 

данные json

 [
  {
    "symbol": "BNBUSDT",
    "positionAmt": "0.02",
    "entryPrice": "186.46100",
    "markPrice": "185.28100000",
    "unRealizedProfit": "-0.02360000",
    "liquidationPrice": "0",
    "leverage": "20",
    "maxNotionalValue": "250000",
    "marginType": "cross",
    "isolatedMargin": "0.00000000",
    "isAutoAddMargin": "false",
    "positionSide": "LONG",
    "notional": "3.70562000",
    "isolatedWallet": "0"
  },
  {
    "symbol": "BNBUSDT",
    "positionAmt": "0.00",
    "entryPrice": "0.00000",
    "markPrice": "185.28100000",
    "unRealizedProfit": "0.00000000",
    "liquidationPrice": "0",
    "leverage": "20",
    "maxNotionalValue": "250000",
    "marginType": "cross",
    "isolatedMargin": "0.00000000",
    "isAutoAddMargin": "false",
    "positionSide": "SHORT",
    "notional": "0",
    "isolatedWallet": "0"
  },
  {
    "symbol": "AKROUSDT",
    "positionAmt": "0",
    "entryPrice": "0.00000",
    "markPrice": "0.04434779",
    "unRealizedProfit": "0.00000000",
    "liquidationPrice": "0",
    "leverage": "20",
    "maxNotionalValue": "25000",
    "marginType": "isolated",
    "isolatedMargin": "0.00000000",
    "isAutoAddMargin": "false",
    "positionSide": "BOTH",
    "notional": "0",
    "isolatedWallet": "0"
  }
]
 

Ответ №1:

Вы можете отфильтровать выходные данные, используя понимание списка:

 filtered = [x for x in positions if float(x['positionAmt']) > 0.01]
 

Это должно вернуть список со значениями, в которых значение positionAmt больше 0,01. Вы можете настроить это, чтобы возвращать определенное значение, например symbol :

 filtered_symbols = [x['symbol'] for x in positions if float(x['positionAmt']) > 0.01]
 

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

1. «Ошибка типа: объект JSON должен быть str, bytes или bytearray, а не list» Когда я возвращаюсь в цикле for, как указано выше, я получаю следующую ошибку

Ответ №2:

Это то, что вы хотите?

 import json


def open_positions():
    with open("sample.json") as jf:
        positions = json.load(jf)
        return [x for x in positions if x["positionAmt"] > "0.01"]


print(open_positions())

 

Вывод:

 [{'symbol': 'BNBUSDT', 'positionAmt': '0.02', 'entryPrice': '186.46100', 'markPrice': '185.28100000', 'unRealizedProfit': '-0.02360000', 'liquidationPrice': '0', 'leverage': '20', 'maxNontionalValue': '250000', 'marginType': 'cross', 'isolatedMargin': '0.00000000', 'isAutoAddMargin': 'false', 'positionSide': 'LONG', 'notional': '3.70562000', 'isolatendWallet': '0'}]
 

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

1. Я не могу включить это в цикл for, как указано выше. ошибка