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

2024-09-20 22:52:15 发布

您现在位置: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",}]
                        ...}}

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

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)

Tags: namejsonurldatawithusernameaccountresult
2条回答

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

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

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

要查看Python正在做什么,可以在for循环中添加print(account);您应该能够观察变量每次从数组中获取新值的方式。(当然,调试完成后,请取出print。)

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'}

相关问题 更多 >

    热门问题