首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python访问复杂的JSON数据

用Python访问复杂的JSON数据
EN

Stack Overflow用户
提问于 2022-02-27 11:16:47
回答 1查看 53关注 0票数 0

我尝试访问复杂的JSON数据结构,但得到了以下错误:

TypeError:列表索引必须是整数或切片,而不是str

这是JSON数据响应im使用的:

代码语言:javascript
复制
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使用:

代码语言:javascript
复制
for i in data["portfolio_item_list"]["stats"]:
    print(i["asset_usd_value"], i["debt_usd_value"], i["net_usd_value"])

我试图保存用户的投资组合数据。我试图在互联网上寻找可能的解决方案,但我对这种复杂的JSON结构非常陌生,无法找到大量的数据。我希望有人能帮我解决我在这里做的错事。

EN

回答 1

Stack Overflow用户

发布于 2022-02-27 11:29:34

之所以会出现问题,是因为您试图访问数据变量,就像访问数据变量一样:data["portfolio_item_list"]["stats"],但它是一个列表。你在portfolio_item_list上也这么做了。

试试这个:

代码语言:javascript
复制
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更改为如下列表:

代码语言:javascript
复制
"stats": [{
    "asset_usd_value": 20.258310032314448,
    "debt_usd_value": 0.03452806117121324,
    "net_usd_value": 20.223781971143236
}],

因为你不能像列表一样循环一段时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71284287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档