2016-08-23 94 views
-1
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'0', 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'[email protected]', 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'[email protected]', u'sms_id': u'sms1'}], u'ref': 
     u'[email protected]', 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 s,但是这需要太多的代码。寻找更好的方法比 如下:检查json数据中所有字段的最佳方法?

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

你有没有试过的代码的例子? – Mark

+0

你究竟想要什么? – Harsha

+0

如果名称不在parsed_json [0]中: 打印“名称不存在” 如果parsed_json [0] ['名称']是“”: 打印“名称值为空” if'region'not in parsed_json [0]: 打印“区域不存在” – user3688785

回答

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]) 

注意:这会考虑像00.0为不存在的数值。如果这不是你想要的,你需要检查这些类型并相应地修改第一个if

1

的Python 3.x的代码:

for key, value in parsed_json[0].items(): 
    if value == "": 
    print(key + " value is empty.") 

注:此代码不会通过键区分错误消息(每个人得到同样的错误信息)并没有妥善逃脱。如果您从不受信任的来源获取这些数据(专业提示,它们都是不可信的来源),则应该有错误捕获/处理来说明丢失/损坏的密钥名称。

+1

该循环中的另一个简单测试:'如果key不在valid_keys:print(key +'无效')' – nigel222

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}

相关问题