python - 如何在 python 中过滤和打印特定的 json 字典

标签 python json api dictionary object

我正在学习 python。我遇到了无法克服的json问题。

我在 python 中有这个来自 json 的数据集:

{
    "Sophos": {
        "detected": true,
        "result": "phishing site"
    },
    "Phishtank": {
        "detected": false,
        "result": "clean site"
    },
    "CyberCrime": {
        "detected": false,
        "result": "clean site"
    },
    "Spam404": {
        "detected": false,
        "result": "clean site"
    },
    "SecureBrain": {
        "detected": false,
        "result": "clean site"
    },
    "Hoplite Industries": {
        "detected": false,
        "result": "clean site"
    },
    "CRDF": {
        "detected": false,
        "result": "clean site"
    },
    "Rising": {
        "detected": false,
        "result": "clean site"
    },
    "Fortinet": {
        "detected": true,
        "result": "phishing site"
    },
    "alphaMountain.ai": {
        "detected": true,
        "result": "phishing site"
    },
    "Lionic": {
        "detected": false,
        "result": "clean site"
    },
    "Cyble": {
        "detected": false,
        "result": "clean site"
    }
}

我想以这样的方式过滤这些字典,以便只打印那些“检测到”:true的键和值。

例如我只想打印

{
    "Sophos": {
        "detected": true,
        "result": "phishing site"
    },
    "Fortinet": {
        "detected": true,
        "result": "phishing site"
    }
}

我使用 VirusTotal apikey v2 https://developers.virustotal.com/v2.0/reference/domain-report 我在 python 中的代码:

parameters = {'apikey': api_key, 'resource': domain}

response = requests.get(url, params=parameters)
    
python_response = json.loads(response.text)

scans = python_response["scans"]

example = json.dumps(python_response["scans"], indent=4)

print(example)

我正在寻找一种简单易读的方法来做到这一点,以便我尽可能地理解它。我想用 Python 打印结果。我为此搜索并阅读了各种解决方案(列表理解或使用 lambda 的 filter()),但它对我没有帮助。

我还在学习中,如果是简单的案例,请提前感谢您的理解。

预先感谢您的帮助和回答。

最佳答案

您可以使用 dict comprehension过滤响应字典。 请注意,在您提供的示例中,我认为您有 json 数据而不是 python 对象。 true 在 python 中不是有效的 bool 关键字,它应该是 True

filtered = {k: v for k, v in orignal_dict.items() if v.get("detected") == true}

以你的例子 -

true = True
false = False

data = {
    "Sophos": {
        "detected": true,
        "result": "phishing site"
    },
    "Phishtank": {
        "detected": false,
        "result": "clean site"
    },
    "CyberCrime": {
        "detected": false,
        "result": "clean site"
    },
    "Spam404": {
        "detected": false,
        "result": "clean site"
    },
    "SecureBrain": {
        "detected": false,
        "result": "clean site"
    },
    "Hoplite Industries": {
        "detected": false,
        "result": "clean site"
    },
    "CRDF": {
        "detected": false,
        "result": "clean site"
    },
    "Rising": {
        "detected": false,
        "result": "clean site"
    },
    "Fortinet": {
        "detected": true,
        "result": "phishing site"
    },
    "alphaMountain.ai": {
        "detected": true,
        "result": "phishing site"
    },
    "Lionic": {
        "detected": false,
        "result": "clean site"
    },
    "Cyble": {
        "detected": false,
        "result": "clean site"
    }
}


filtered = {k: v for k, v in data.items() if v.get("detected") == true}
print(json.dumps(filtered, indent=4))

输出:

{
    "Sophos": {
        "detected": true,
        "result": "phishing site"
    },
    "Fortinet": {
        "detected": true,
        "result": "phishing site"
    },
    "alphaMountain.ai": {
        "detected": true,
        "result": "phishing site"
    }
}

关于python - 如何在 python 中过滤和打印特定的 json 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74444498/

相关文章:

api - Laravel - 在标题中发送 api_token

c# - 未知对象的 JSON API 操作参数

javascript - 在页面内包含 API 调用以延迟加载

python - Spyder 中的 tkinter

python - 以表格格式漂亮地打印列表

python - Flask WTF 到 flask-mail 附件?

iOS - 将 JSON 对象转换为有序数组

python - Kivy:访问不同类上的方法

json - 如何使用 Spring Hateoas 和 HAL 向链接添加附加属性?

jquery - 使用ajax调用wcf方法时的绝对URL