Как я могу отделить баланс в полученных данных 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 импортирует библиотеку регулярных выражений, встроенную в python


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'}]}}" это строка, содержащая данные для сопоставления. Вы можете заменить это данными 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())
Другие вопросы по тегам