- 啥也不说,以某盾的返回数据为例,很多吐槽比较难解析!!
- 数据中无限嵌套,嵌套的类型为json 和 array
- 数据是存在ElasticSearch中的,所以先看看
-
虽然很长,但是结构无非是嵌套json 或者 list的格式,看下面结构(摘取了其中一小段)
-
ele={ '_source': { 'gmt_create': '2020-02-20 14:18:51', 'id_number': '33049319920423****', 'result_desc': { 'ANTIFRAUD': { 'final_score': 237, 'risk_items': [{ 'rule_id': 28271704, 'policy_score': 237, 'score': 88, 'policy_mode': 'Weighted', 'decision': 'Accept', 'policy_decision': 'Reject', 'policy_name': 'STARK借款_网页', 'risk_name': '身份证格式校验错误' }, { 'rule_id': 28272014, 'policy_score': 237, 'score': 30, 'policy_mode': 'Weighted', 'decision': 'Accept', 'policy_decision': 'Reject', 'policy_name': 'STARK借款_网页', 'risk_name': '手机号格式校验错误' }] } } } }
def get_flatten_json(dd,pre):
'''
:param dd: 为一个json串
:param pre:以某字符开头
:return: 返回拍平的结果,字典
'''
res={}
def flatten_json(dd,pre):
for k,v in dd.items():
if isinstance(v,dict):
pre0 = pre + '_' + k
flatten_json(v,pre0)
if isinstance(v,int) or isinstance(v,str):
pre1=pre+"_"+k
res[pre1[1:]]=v
#res.append((pre1,v))
if isinstance(v,list):
for i,ele in enumerate(v):
pre2 = pre + "_" + k +str(i)
if isinstance(ele,dict):
flatten_json(ele,pre2)
flatten_json(dd,pre)
return res
result=get_flatten_json(ele,"") ### 这里调用下函数就好
输出:
{
'_source_gmt_create': '2020-02-20 14:18:51',
'_source_id_number': '33049319920423****',
'_source_result_desc_ANTIFRAUD_final_score': 237,
'_source_result_desc_ANTIFRAUD_risk_items0_rule_id': 28271704,
'_source_result_desc_ANTIFRAUD_risk_items0_policy_score': 237,
'_source_result_desc_ANTIFRAUD_risk_items0_score': 88,
'_source_result_desc_ANTIFRAUD_risk_items0_policy_mode': 'Weighted',
'_source_result_desc_ANTIFRAUD_risk_items0_decision': 'Accept',
'_source_result_desc_ANTIFRAUD_risk_items0_policy_decision': 'Reject',
'_source_result_desc_ANTIFRAUD_risk_items0_policy_name': 'STARK借款_网页',
'_source_result_desc_ANTIFRAUD_risk_items0_risk_name': '身份证格式校验错误',
'_source_result_desc_ANTIFRAUD_risk_items1_rule_id': 28272014,
'_source_result_desc_ANTIFRAUD_risk_items1_policy_score': 237,
'_source_result_desc_ANTIFRAUD_risk_items1_score': 30,
'_source_result_desc_ANTIFRAUD_risk_items1_policy_mode': 'Weighted',
'_source_result_desc_ANTIFRAUD_risk_items1_decision': 'Accept',
'_source_result_desc_ANTIFRAUD_risk_items1_policy_decision': 'Reject',
'_source_result_desc_ANTIFRAUD_risk_items1_policy_name': 'STARK借款_网页',
'_source_result_desc_ANTIFRAUD_risk_items1_risk_name': '手机号格式校验错误'
}