首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较python中的json值和字典

如何比较python中的json值和字典
EN

Stack Overflow用户
提问于 2022-10-12 17:11:08
回答 2查看 53关注 0票数 -1

我有这样的JSON。

代码语言:javascript
复制
{
  "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"
    },
  ]
}

我创建了这样一个字典,它将用户名映射到它们各自的访问级别。

代码语言:javascript
复制
user_access = {
  "user": "WORKER",
  "user2": "ADMIN",
  "user3": "WORKER",
  "user4": "GENERAL"
}

我试图在API响应json中验证定义的用户是否具有正确的访问级别。

我写了一个这样的函数

代码语言:javascript
复制
 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中的每个用户打印“成功”?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-12 17:24:54

假设apijsondict,例如,在API结果上应用json.loads()生成:

代码语言:javascript
复制
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")
票数 1
EN

Stack Overflow用户

发布于 2022-10-12 17:39:36

python中的字典有两种通过某些键访问值的方法。

通过硬托架索引器的apijson["users"]

  • via .get - apijson.get("users")

注意,两者都区分大小写,而且都使用引号将值作为字符串而不是变量名传递。USERS = "users"; apijson[USERS]也可以,但是首先需要定义USERS

此外-

我们喜欢python中的冒号,所以if <>:/else:

  • The关键字or/and是区分大小写的,所以您的示例AND -> and

  • Your示例json结构有users.accesslevel作为数组,所以(更正的) user_result["accesslevel"] == 'WORKER'不会从user_result["accesslevel"] = ["WORKER"]

开始计算为True。

所以经过一些修正,

代码语言:javascript
复制
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")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74045664

复制
相关文章

相似问题

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