Python自动化模拟构造数据的过程中,经常会遇到复杂的json转换为thrift结构的情况,下面统一转化的脚本就能帮助解决问题:
def json_thrift_convertor2(src_json, dest_struct, ignore_unknow_key=False):
"""
@src_json: dict loads from user pass json body
@dest_struct: final thrift type after parse
@ignore_unknow_key: default False, if one key in src_json but not
in thrift proto define, throw an exception(False) or just
ignore(True)
"""
try:
for (k, v) in src_json.items():
# 此处需要进行field检查,确认对应的field`s在thrift结构的proto定义中,
# 此处如果不加检查,其实__setattr__依然可以给目的结构加入不存在的key
if not dest_struct._tspec.has_key(k):
if not ignore_unknow_key:
print("user`s fields(%s) not exist in thrift proto" % k)
raise UnknowInputFieldsError(
"Check input, field(%s) not exist in thrift proto" % k)
else:
print("user input fields(%s) not exist in thrift proto" % k)
if type(v) is