将给定变量与 Python 中结构化 JSON 的值匹配

Match given variable with value from structured JSON in Python

根据请求,我有一个给定的变量,如

realname = "Toni Toni"

我有一个结构化的 JSON 调用

with urllib.request.urlopen("https://api.webside") as url:
    data = json.loads(url.read().decode())

结构像

{
    "status": 200,
    "result": {
        "accountStatistics": [{
                    "account": {
                        "name": "Toni Toni",
                        "handle": "toni.k",
                    },
                }, {
                    "account": {
                        "name": "Gina",
                        "handle": "katja.k",}]
                        ...}}

我想要的是:当我给定的变量“realname”与 JSON 中的任何变量“name”匹配时,然后创建一个新变量“username”,其中包含变量“handle”的字符串”(适合于它所属的“名字”) 所以我的结果是:

realname = "Toni Toni"
username = "toni.k"

我找到了代码示例,但无法将其转移到我的具体问题中。我是 Python 的新手。有人可以帮我吗?

我试过这个访问,但我得到了 TypeError: list indices must be integers or slices, not str:

for ["account"]["name"] in data["result"]["accountStatistics"]:
    if ["name"] ==realname:
        username = account["name"]
        print(username)

getUsernameOf(realname, data) 有两个参数,要查找的 name 和要搜索的 JSON。

import json

handle = open('./data.json')
data = json.load(handle)

def getUsernameOf(realname, data):
    # Match accountStatistics and map over this
    # capturing all `account` objects into a list
    accounts = [x['account'] for x in data['result']['accountStatistics']]
    for account in accounts:
        if account['name'] == realname:
            return account
    return None

使用:

{
    "status": 200,
    "result": {
        "accountStatistics": [
            {
                "account": {
                    "name": "Toni Toni",
                    "handle": "toni.k"
                }
            },
            {
                "account": {
                    "name": "Gina",
                    "handle": "katja.k"
                }
            }
        ]
    }
}

data.json,然后运行:

print(getUsernameOf("Toni Toni", data))
> {'name': 'Toni Toni', 'handle': 'toni.k'}

for 之后的内容应该是一个新变量的名称,它将包含您在每次迭代中循环的下一个值。

for account in data["result"]["accountStatistics"]:
    if account["name"] == realname:
        username = account["name"]
        print(username)
        break  # perhaps

在这里,我们正在创建一个新变量 account,它将在循环主体的持续时间内连续获取列表(数组)data["result"]["accountStatistics"] 中的每个值。 (当循环退出时,它将引用它在循环中的最后一个值。如果您确定它是唯一的,我建议您 break 在找到要查找的值时退出循环,或者你只需​​要第一次点击。)

要查看 Python 在做什么,可以在 for 循环中添加 print(account);您应该能够观察到变量每次如何从数组中获取新值。 (当然调试完了把print去掉)