我想检查JSON输入中是否存在元素,并且看起来下面的代码片段有效
import json
y = {
"attributes": [
{
"name": "test"
}
]
}
p2 = json.dumps(y)
if 'attributes' not in p2:
print("not found")
else:
print("found")
我现在要检查attribute元素是否为list类型和列表大小
实现此目标的Python方法是什么?
答案 0 :(得分:3)
json.dumps
的结果是JSON格式的字符串,因此,如果要搜索p2
,则必须进行某种字符串匹配。即'attributes:[' in p2
会匹配JSON中的某处,其中有一个“属性”键名,后跟一个数组。此解决方案并不是理想的选择,因为它无法处理JSON字符串格式不同(例如带有缩进格式)的情况。
Python方法是检查y
本身,就像其他答案所建议的那样。即
('attributes' in y) # True because it exists
(isinstance(y['attributes'], list)) # True because it's a list
最蟒蛇的方法就是简单地假设这是一个列表,如果您遇到一个失败则处理失败。
我还想向Marshmallow序列化库中快速添加一个消息。它旨在处理更复杂的模式验证任务,但是您也可以在此处应用它,以验证属性字段是否存在并映射到列表。即
y = { ... } # like before...
from mashmallow import Schema, fields
class AttributesList(Schema):
attributes = fields.List(fields.Dict())
al = AttributesList()
al.dumps(y)
答案 1 :(得分:0)
使用isinstance()
检查类型,它将返回布尔值
y = {
"attributes": [
{
"name": "test"
}
]
}
# p2 = json.dumps(y)
if 'attributes' not in y:
print("not found")
else:
print(y['attributes'])
print(isinstance(y['attributes'], list))
if isinstance(y['attributes'], list):
print('its a list')
print(len(y['attributes']))
print("found")
输出:
[{'name': 'test'}]
True
its a list
1
found
答案 2 :(得分:0)
您的代码段p2
中是一个字符串(json.dumps
将y
转换为字符串中的有效JSON对象)
isinstance
是首选的检查方式,因此您可以使用:
if isinstance(y['attributes'], list):
len(y['attributes'])
答案 3 :(得分:0)
json_data = json.dumps({
"attributes": [
{
"name": "test"
}
]
})
item_dict = json.loads(json_data)
print(type((item_dict['attributes']))) # list
print(len((item_dict['attributes'][0]))) # 1