我尝试访问复杂的JSON数据结构,但得到了以下错误:
TypeError:列表索引必须是整数或切片,而不是str
这是JSON数据响应im使用的:
data = [
{
"id": "matic_atlantis",
"chain": "matic",
"name": "Atlantis",
"site_url": "https://atlantis.loans",
"logo_url": "https://static.debank.com/image/project/logo_url/matic_atlantis/a1334c12971c12f4796ea439fbc1c5f8.png",
"has_supported_portfolio": True,
"tvl": 0,
"portfolio_item_list": [
{
"stats": {
"asset_usd_value": 20.258310032314448,
"debt_usd_value": 0.03452806117121324,
"net_usd_value": 20.223781971143236
},
"update_at": 1645959230.678967,
"name": "Lending",
"pool_id": "0x8f85ee1c0a96734cb76870106dd9c016db6de09a",
"detail_types": [
"lending"
],
"detail": {
"supply_token_list": [
{
"id": "matic",
"chain": "matic",
"name": "MATIC",
"symbol": "MATIC",
"display_symbol": None,
"optimized_symbol": "MATIC",
"decimals": 18,
"logo_url": "https://static.debank.com/image/matic_token/logo_url/matic/e5a8a2860ba5cf740a474dcab796dc63.png",
"protocol_id": "",
"price": 1.525962,
"is_verified": True,
"is_core": True,
"is_wallet": True,
"time_at": None,
"amount": 0.00007212821116324932,
"is_collateral": True
},
{
"id": "0x831753dd7087cac61ab5644b308642cc1c33dc13",
"chain": "matic",
"name": "Quickswap",
"symbol": "QUICK",
"display_symbol": None,
"optimized_symbol": "QUICK",
"decimals": 18,
"logo_url": "https://static.debank.com/image/matic_token/logo_url/0x831753dd7087cac61ab5644b308642cc1c33dc13/3f40a8915d99b9dd0e24d5205c89eb34.png",
"protocol_id": "matic_quickswap",
"price": 165.3,
"is_verified": True,
"is_core": True,
"is_wallet": True,
"time_at": 1602175296,
"amount": 0.12255414378345482,
"is_collateral": True
}
],
"borrow_token_list": [
{
"id": "matic",
"chain": "matic",
"name": "MATIC",
"symbol": "MATIC",
"display_symbol": None,
"optimized_symbol": "MATIC",
"decimals": 18,
"logo_url": "https://static.debank.com/image/matic_token/logo_url/matic/e5a8a2860ba5cf740a474dcab796dc63.png",
"protocol_id": "",
"price": 1.525962,
"is_verified": True,
"is_core": True,
"is_wallet": True,
"time_at": None,
"amount": 0.000002603921715322
},
{
"id": "0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39",
"chain": "matic",
"name": "ChainLink Token",
"symbol": "LINK",
"display_symbol": None,
"optimized_symbol": "LINK",
"decimals": 18,
"logo_url": "https://static.debank.com/image/matic_token/logo_url/0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39/69425617db0ef93a7c21c4f9b81c7ca5.png",
"protocol_id": "",
"price": 14.5811,
"is_verified": True,
"is_core": True,
"is_wallet": True,
"time_at": 1598767775,
"amount": 0.000163336006690615
},
{
"id": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174",
"chain": "matic",
"name": "USD Coin (PoS)",
"symbol": "USDC",
"display_symbol": None,
"optimized_symbol": "USDC",
"decimals": 6,
"logo_url": "https://static.debank.com/image/matic_token/logo_url/0x2791bca1f2de4661ed88a30c99a7a9449aa84174/fffcd27b9efff5a86ab942084c05924d.png",
"protocol_id": "",
"price": 1,
"is_verified": True,
"is_core": True,
"is_wallet": True,
"time_at": 1601199611,
"amount": 0.000054
},
{
"id": "0x831753dd7087cac61ab5644b308642cc1c33dc13",
"chain": "matic",
"name": "Quickswap",
"symbol": "QUICK",
"display_symbol": None,
"optimized_symbol": "QUICK",
"decimals": 18,
"logo_url": "https://static.debank.com/image/matic_token/logo_url/0x831753dd7087cac61ab5644b308642cc1c33dc13/3f40a8915d99b9dd0e24d5205c89eb34.png",
"protocol_id": "matic_quickswap",
"price": 165.3,
"is_verified": True,
"is_core": True,
"is_wallet": True,
"time_at": 1602175296,
"amount": 0.000194122619712451
}
],
"health_rate": 322.6968922103766
},
"proxy_detail": {}
}
]
}
]python代码im使用:
for i in data["portfolio_item_list"]["stats"]:
print(i["asset_usd_value"], i["debt_usd_value"], i["net_usd_value"])我试图保存用户的投资组合数据。我试图在互联网上寻找可能的解决方案,但我对这种复杂的JSON结构非常陌生,无法找到大量的数据。我希望有人能帮我解决我在这里做的错事。
发布于 2022-02-27 11:29:34
之所以会出现问题,是因为您试图访问数据变量,就像访问数据变量一样:data["portfolio_item_list"]["stats"],但它是一个列表。你在portfolio_item_list上也这么做了。
试试这个:
for i in data[0]["portfolio_item_list"][0]["stats"]:
print(i["asset_usd_value"], i["debt_usd_value"], i["net_usd_value"])在这里,首先访问数据数组中的第一个elemt,然后访问元素的值。
您应该做的第二件事是将stats更改为如下列表:
"stats": [{
"asset_usd_value": 20.258310032314448,
"debt_usd_value": 0.03452806117121324,
"net_usd_value": 20.223781971143236
}],因为你不能像列表一样循环一段时间。
https://stackoverflow.com/questions/71284287
复制相似问题