我正在努力将API从slim / PHP转换为flask / Python。
我在slim应用程序中使用JSON验证器,在这种情况下,默认情况下需要在架构中的对象中指定的所有键。如果缺少密钥,则导致验证失败,除非指定为"可选"。
我安装了pip install jsonschema
以便在我的python中使用。默认情况下,除非在对象之后按要求指定,否则不需要键。
有没有办法让python"版本"这个验证器的工作就像苗条"版本"我在和谁合作?这将节省大量更新我已经定义的模式。
答案 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']