首页 > 解决方案 > 查找dict中是否存在数组且不为空

问题描述

我想检查我的 JSON 输入中是否存在一个元素,并且看起来下面的代码片段有效

import json
y = {
    "attributes": [
        {
            "name": "test"
        }
    ]
}

p2 = json.dumps(y)

if 'attributes' not in p2:
    print("not found")
else:
    print("found")

我现在想检查属性元素是否属于列表类型和列表大小

实现这一目标的pythonic方法是什么?

标签: python

解决方案


的结果json.dumps是 JSON 格式的字符串,因此如果您要搜索p2,则必须进行某种字符串匹配。即'attributes:[' in p2匹配是在你的 JSON 中的某个地方有一个“属性”键名,后跟一个数组。这个解决方案并不理想,因为它不能处理 JSON 字符串格式不同(例如,带有缩进)的情况。

pythonic的方法是检查y自己,就像其他答案所暗示的那样。即

('attributes' in y)  # True because it exists
(isinstance(y['attributes'], list))  # True because it's a list

最pythonic的方法是简单地假设它是一个列表并在你点击一个时处理失败。

我还想向Marshmallow序列化库添加一个快速的提示。它旨在处理更复杂的模式验证任务,但您也可以在此处应用它来验证属性字段是否存在以及它是否映射到列表。IE

y = { ... }  # like before...

from mashmallow import Schema, fields
class AttributesList(Schema):
    attributes = fields.List(fields.Dict())

al = AttributesList()
al.dumps(y)

推荐阅读