我有这样的JSON。
{
"currentdatetime": "11",
"syncinterval_seconds": 4,
"public_keys": [
{
"system": "aa",
"pubkey": "aa"
}
],
"users": [
{
"username": "user",
"user_id": "user",
"realname": "user_10",
"emailaddress": "test@gmail.com",
"accountenabled": false,
"mustchangepassword": false,
"passwordhash": "$E6gi",
"accesslevel": [
"WORKER"
],
"expiration": "2022-11-02T16:21:52",
"site_specific": false,
"symkey": "aaaa",
"privatekey": "aaa"
},
]
}我创建了这样一个字典,它将用户名映射到它们各自的访问级别。
user_access = {
"user": "WORKER",
"user2": "ADMIN",
"user3": "WORKER",
"user4": "GENERAL"
}我试图在API响应json中验证定义的用户是否具有正确的访问级别。
我写了一个这样的函数
def LoadUserList(apijson)
for user_result in apijson[USERS]:
username = user_result[USER_NAME]
accesslevel = user_result[accesslevel]
if (user_result[USER_NAME] == 'user' AND user_result[accesslevel] == 'WORKER')
print "success"
else
print "not matching"但是上面的代码并没有像预期的那样工作。我不知道如何将JSON中的值与字典中的值进行比较。如何修复我的代码,以便它为user_access字典中具有匹配的访问级别值的JSON中的每个用户打印“成功”?
发布于 2022-10-12 17:24:54
假设apijson是dict,例如,在API结果上应用json.loads()生成:
def LoadUserList(apijson)
for user in apijson['users']:
username, accesslevel = user['username'], user['accesslevel']
if user_access.get(username) in accesslevel:
print(username, "success")
else
print(username, "not matching")发布于 2022-10-12 17:39:36
python中的字典有两种通过某些键访问值的方法。
通过硬托架索引器的apijson["users"]
.get - apijson.get("users")的
注意,两者都区分大小写,而且都使用引号将值作为字符串而不是变量名传递。
USERS = "users"; apijson[USERS]也可以,但是首先需要定义USERS。
此外-
我们喜欢python中的冒号,所以if <>:/else:
or/and是区分大小写的,所以您的示例AND -> and
user_result["accesslevel"] == 'WORKER'不会从user_result["accesslevel"] = ["WORKER"]开始计算为True。
所以经过一些修正,
def LoadUserList(apijson):
for user_result in apijson["users"]:
username = user_result["username"]
accesslevel = user_result["accesslevel"]
user_accesslevel = user_access.get(username) # "WORKER"
if (username == 'user' and user_accesslevel in accesslevel):
print("success")
else:
print("not matching")https://stackoverflow.com/questions/74045664
复制相似问题