data = {u'name': None, u'region': None, u'id': u'test1', u'code': None,
u'city': None, u'first_name': None, u'state_or_province': None,
u'primary_phone': None, u'data2': [{u'status': u'deleted', u'name':
u'b1', u'id': u'b1', u'modified_at': u'2016-07-13T10:22:47Z', u'eid':
u'0012340', u'device_type': u'Mad box', u'custom_data': None,
u'is_managed': True, u'number': None, u'sms_id': u'sms1'}],
u'secondary_phone': None, u'sms_id': u'sms1', u'status': u'deleted',
u'users': [{u'allow_content': False, u'status': u'deleted',
u'sign_in_count': 0, u'max1': {u'TV': u'TV-MA', u'MPAA': u'NC-17',
u'Unrated': u'UR'}, u'name': u'', u'subscriber_id': u'b1', u'gender':
None, u'ids': [], u'modified_at': u'2016-07-27T10:18:19Z',
u'allow_adult_content': False, u'sharing_threshold': {}, u'custom_data':
None, u'user_id': u'test@test.com', u'email': None, u'sms_id': u'sms1'},
{u'allow_unrated_content': None, u'status': u'deleted', u'sign_in_count':
0, u'max_rating': {}, u'name': None, u'subscriber_id': u'testsub1',
u'gender': None, u'offer_uri_ids': [], u'modified_at':
u'2016-07-13T10:13:32Z', u'allow_adult_content': None,
u'sharing_threshold': {}, u'custom_data': None, u'user_id': u'test',
u'email': u'asdf@god.com', u'sms_id': u'sms1'}], u'ref':
u'test@test.com', u'pin_code': None, u'credit_limit': 100.0,
u'expiration': None, u'country': None, u'modified_at':
u'2016-07-27T10:18:19Z', u'last_change_date': None, u'custom_data': None,
u'address_line_1': None, u'address_line_2': None, u'change_id': None,
u'billing_codes': []}
我需要验证空数据的所有密钥和值。
试过if/else
,但这需要太多代码。寻找更好的方法比
以下内容:
parsed_json = [data]
if 'name' not in parsed_json[0]:
print "name is not present"
if parsed_json[0]['name'] is "":
print "name value is empty"
if 'region' not in parsed_json[0]:
print "region is not present"
if parsed_json[0]['region'] is ""
print "region value is empty"
答案 0 :(得分:1)
Python 3.x代码:
for key, value in parsed_json[0].items():
if value == "":
print(key + " value is empty.")
注意:此代码不会按密钥区分错误消息(每个消息都会收到相同的错误消息)并且未正确转义。如果您从不受信任的来源获取此数据(专业提示,它们都是不受信任的来源),您应该有错误捕获/处理来解释丢失/损坏的密钥名称。
答案 1 :(得分:1)
要获取仅包含空值的过滤字典,您可以执行以下操作:
Python 2.x
empty_values = {k:v代表k,v代表data.iteritems(),如果不是v}
Python 3.x
empty_values = {k:v代表k,v代表data.items(),如果不是v}
答案 2 :(得分:1)
由于JSON对象是一个递归数据结构,可能是递归执行所需操作的最简单方法:
def verify(key, value):
if not value:
print('"{}" is not present'.format(key))
elif isinstance(value, dict):
for k, v in value.items():
verify(k, v)
elif isinstance(value, list):
for i, element in enumerate(value):
verify('{}[{}]'.format(key, i), element)
parsed_json = [data]
verify('parsed_json', parsed_json[0])
注意:这会将0
和0.0
等数值视为不存在。如果那不是你想要的,你需要检查这些类型并相应地修改第一个if
。