将给定变量与 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
去掉)
根据请求,我有一个给定的变量,如
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
去掉)