Python递归解析同盾返回的json数据

  • 啥也不说,以某盾的返回数据为例,很多吐槽比较难解析!!
  • 数据中无限嵌套,嵌套的类型为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': '手机号格式校验错误'
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值