它嵌套很深,txs 是外键,txs 的值是一个列表,它有一个带有 inputs 的字典,其值也是一个包含字典的列表,在该字典内 @987654326 @ 有一个 dict 作为具有 addr_tagkey 的值:
print(obj1["txs"][0]["inputs"][0]["prev_out"]["addr_tag"])
第二个在下面的json中实际上有2个addr_tags:
print(obj1["txs"][0]["out"][1]["addr_tag"])
Satoshi Dice Change Address
如果键不总是在那里,你可以使用 dict.get:
inter = js["txs"][0]
k1 = next((d["prev_out"].get("addr_tag") for d in inter["inputs"] if "prev_out" in d), None)
k2 = next((d.get("addr_tag") for d in inter["out"] if "addr_tag" in d), None)
如果您的 json 中没有任何键,则该值为 None,因此您可以使用 if 进行检查:
if k1 is not None:
.......
if k2 is not None:
................
查看链接,数据和格式在每次运行中不断变化,此函数将递归检查所有字典并提取任何 "addr_tag" 值:
def rec_get(d, k):
if isinstance(d, dict):
if k in d:
yield d[k]
else:
for v in d.values():
yield from rec_get(v, k)
elif isinstance(d, list):
for v in d:
yield from rec_get(v, k)
print(list(rec_get(js, "addr_tag")))
使用链接 json,你会得到它重复一些键,但你可以调用 set(.. 而不是列表:
['Satoshi Dice Change Address', 'Satoshi Dice Change Address', 'SatoshiDICE 50%', 'Satoshi Dice Change Address']