JSON验证,使模式中定义的所有键都需要

时间:2016-11-25 20:07:38

标签: python json validation

我正在努力将API从slim / PHP转换为flask / Python。

我在slim应用程序中使用JSON验证器,在这种情况下,默认情况下需要在架构中的对象中指定的所有键。如果缺少密钥,则导致验证失败,除非指定为"可选"。

我安装了pip install jsonschema以便在我的python中使用。默认情况下,除非在对象之后按要求指定,否则不需要键。

有没有办法让python"版本"这个验证器的工作就像苗条"版本"我在和谁合作?这将节省大量更新我已经定义的模式。

1 个答案:

答案 0 :(得分:1)

Pandas是一个很棒的数据库来帮助处理数据:

from pandas.io.json import json_normalize

req = ['p1', 'p2.p2A', 'p3'] # required parameters
rec = {'p1' : 1, 'p2' : {'p2A' : 2, 'p2B':3}, 'p3':4} # what we received

recFlat = json_normalize(rec).to_dict().keys() # flatten received parameters, and get the list of the keys
print('required: %s' % req)
print('received: %s' % rec)
print('   flat : %s' % recFlat)

req_in_rec = set(req).issubset(recFlat) # test if required parameters are in received parameters
print('required parameters set: ', req_in_rec)

req.append('p22.A') # new parameters are required
req.append('p4')
print('\nnew required parameters : %s' % req)
req_in_rec = set(req).issubset(recFlat) # test if required parameters are in received parameters
print('required parameters set: ', req_in_rec)

missing_parameters = list(req - recFlat)
print('missing parameters : %s' % missing_parameters)

输出:

required: ['p1', 'p2.p2A', 'p3']
received: {'p2': {'p2A': 2, 'p2B': 3}, 'p3': 4, 'p1': 1}
   flat : dict_keys(['p2.p2B', 'p2.p2A', 'p1', 'p3'])
required parameters set:  True

new required parameters : ['p1', 'p2.p2A', 'p3', 'p22.A', 'p4']
required parameters set:  False
missing parameters : ['p4', 'p22.A']