- 啥也不說,以某盾的返回數據爲例,很多吐槽比較難解析!!
- 數據中無限嵌套,嵌套的類型爲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': '手機號格式校驗錯誤'
}