【问题标题】:How to print matching json element value from nested json string如何从嵌套的 json 字符串中打印匹配的 json 元素值
【发布时间】:2023-01-22 22:26:53
【问题描述】:

my_json 文件有嵌套字典列表,如果type==Developer-Verified and it's value==1,我只需要打印用户名,我只打印了批准列表,无法继续。

$ cat myjson_file | python3.6 -c "import sys, json; approvals=json.load(sys.stdin)['currentPatchSet']['approvals']; print(json.dumps(approvals, indent=4))"

[
    {
        "type": "Developer-Verified",
        "description": "Developer-Verified",
        "value": "1",
        "grantedOn": 1581451370,
        "by": {
            "name": "Donald Snifer",
            "email": "dsnifer@gmail.com",
            "username": "dsnifer"
        }
    },
    {
        "type": "Code-Review",
        "description": "Code-Review",
        "value": "2",
        "grantedOn": 1581623684,
        "by": {
            "name": "Brandon Welch",
            "email": "bwelch@gmail.com",
            "username": "bwelch"
        }
    },
    {
        "type": "Developer-Verified",
        "description": "Developer-Verified",
        "value": "1",
        "grantedOn": 1581451370,
        "by": {
            "name": "Hamlin Damer",
            "email": "hdamer@gmail.com",
            "username": "hdamer"
        }
    }
]
$ 

我只需要打印dsnifer hdamer

我试图用下面的逻辑和其他逻辑进一步发展,但我一直失败 python3.6 -c "import sys, json; approvals=json.load(sys.stdin)['currentPatchSet']['approvals']; print( k for k,v in approvals[0].items())"

【问题讨论】:

    标签: python python-3.6


    【解决方案1】:

    您可以使用列表理解来遍历批准列表并检查每个字典的“类型”和“值”字段,然后从嵌套的“by”字典中提取“用户名”。这是一个例子:

    import sys, json
    approvals = json.load(sys.stdin)['currentPatchSet']['approvals']
    usernames = [approval["by"]["username"] for approval in approvals if approval["type"] == "Developer-Verified" and approval["value"] == "1"]
    print(usernames)
    

    这将从批准列表中输出类型为“Developer-Verified”且值为“1”的用户的用户名。

    【讨论】:

      【解决方案2】:

      您可以遍历批准列表并使用 if 语句检查类型是否为“Developer-Verified”且值为“1”。如果满足这些条件,您可以打印“by”字典中的用户名。这是您如何执行此操作的示例:

      import sys, json
      approvals = json.load(sys.stdin)['currentPatchSet']['approvals']
      usernames = [approval['by']['username'] for approval in approvals if approval['type'] == 'Developer-Verified' and approval['value'] == '1']
      print(usernames)
      

      这是可以从终端执行的一行脚本:

      python3.6 -c "import sys, json; approvals=json.load(sys.stdin)['currentPatchSet']['approvals']; print([approval['by']['username'] for approval in approvals if approval['type'] == 'Developer-Verified' and approval['value'] == '1'])" < myjson_file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 2021-07-16
        • 2015-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多