#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, как указано выше. ошибка