Как я могу отделить баланс в полученных данных JSON?
Итак, я тестировал API block.io, и до сих пор у меня есть это:
knee = block_io.get_address_balance(labels='shibe1')
s1 = json.dumps(knee)
d2 = json.loads(s1)
print (d2)
Это возвращает меня с этой партией текста:
{'status': 'success', 'data': {'network': 'DOGE', 'available_balance': '0.0', 'pending_received_balance': '0.0', 'balances': [{'user_id': 1, 'label': 'shibe1', 'address': 'A9Bda9UMBcb1183PtsBxnbj5QgP6jwkCFG', 'available_balance': '0.00000000', 'pending_received_balance': '0.00000000'}]}}
Как бы получить его, чтобы я мог получить только часть available_balance и распечатать его вместо всех данных json?
РЕДАКТИРОВАТЬ: Пожалуйста, помогите! Не могу найти решение.
1 ответ
Попробуйте использовать несколько регулярных выражений.
import re
data="{'status': 'success', 'data': {'network': 'DOGE', 'available_balance': '0.129',
'pending_received_balance': '0.0', 'balances': [{'user_id': 1, 'label': 'shibe1',
'address': 'A9Bda9UMBcb1183PtsBxnbj5QgP6jwkCFG', 'available_balance': '0.00000000',
'pending_received_balance': '0.00000000'}]}}"
pattern = re.compile("(?<=available_balance': ').*?(?=')")
matches = pattern.finditer(data)
for match in matches:
print(match.group())
Сломать: import re
импортирует библиотеку регулярных выражений, встроенную в pythondata="{'status': 'success', 'data': {'network': 'DOGE', 'available_balance': '0.129',
'pending_received_balance': '0.0', 'balances': [{'user_id': 1, 'label': 'shibe1',
'address': 'A9Bda9UMBcb1183PtsBxnbj5QgP6jwkCFG', 'available_balance': '0.00000000',
'pending_received_balance': '0.00000000'}]}}"
это строка, содержащая данные для сопоставления. Вы можете заменить это данными JSON.pattern = re.compile("(?<=available_balance': ').*?(?=')")
Составляет регулярное выражение для поиска данных для доступного баланса.
Распределение регулярных выражений
(?<=
это взгляд назад, что означает, что он проверит, является ли значение на самом делеavailable_balance
,.*
соответствует всему внутри определенного ограничения.(?=
это предвидение, что означает, что оно будет соответствовать всему до закрывающей скобки, и всему, что следует за последним.pattern.finditer(data)
соответствует регулярному выражениюdata
for match in matches:
print(match.group())
печатает спички из регулярного выражения
Если вы скомпилируете этот код, вы получите следующие результаты:
0.129
0.00000000
Если вы хотите код под вашими переменными, вот вам:
import re
pattern = re.compile("(?<=available_balance': ').*?(?=')")
matches = pattern.finditer(d2)
for match in matches:
print(match.group())