import json
# coding: utf-8
from functools import singledispatch
from collections import abc
import inspect
import traceback {"CERT_ID":"12312424","CERT_NAME":"测试","PROD_ID":"CREDIT","MP":"10086","TRANS_INFO":"1232434355","DATA":[{"attributes": {"CR_PS_MC_LM24":0.0,"CR_TR_TR_LM24":0.0,"CD_AL_IS_LM24":2.0,"CD_CC_AL_LM12":1.0,"CR_DC_OGO2_LM12":0.0,"CR_EX_EP_LM06":0.0,"CR_CC_CS_LM03":0.0}},{"blacklist": [{"orgLostContact":null,"bankLostContact":null,"seriousOverdueTime":"20170422","dunTelCallTime":"20170829","orgBlackList":[{"imsi":"ADFDAFEF243","org_code":"010005","value":null},{"imsi":"ADFDAFEF243","org_code":"434344","value":null},{"imsi":"ADFDAFEF243","org_code":"5335355","value":null}],"orgOverduePeriod":null,"bankOverduePeriod":null,"orgLitigation":null,"bankLitigation":null,"orgOneMonthOvedue":null,"matchType":"phone","matchValue":"ASRWVDSD1224","matchId":"WGDSGGTY223214"}]},{"loan": {"record":[{"matchType":"phone","matchValue":"10086","matchId":"WGDSGGTY223214","classification":[{"M3":{"other":{"orgNums":2,"loanAmount":null,"totalAmount":null,"repayAmount":null,"latestLoanTime":null},"bank":null}},{"M6":{"other":{"orgNums":1,"loanAmount":null,"totalAmount":null,"repayAmount":null,"latestLoanTime":null},"bank":null}},{"M9":{"other":{"orgNums":1,"loanAmount":null,"totalAmount":"(2000, 3000]","repayAmount":"(200, 500]","latestLoanTime":null},"bank":null}},{"M12":{"other":{"orgNums":1,"loanAmount":null,"totalAmount":"(500, 1000]","repayAmount":"(200, 500]","latestLoanTime":null},"bank":null}}],"latestRepaySuccessTime":null}]}},{"overdue": {"record":[{"matchType":"phone","matchValue":"10086","matchId":"FRGDGFSHKYJTGR13214","classification":[{"M12":{"bankCredit":null,"otherLoan":{"orgNums":2,"recordNums":4,"maxAmount":"(200, 500]","longestDays":null,"longestDaysTime":null},"otherCredit":null,"bankLoan":{"orgNums":3,"recordNums":5,"maxAmount":null,"longestDays":"3","longestDaysTime":"2017-08-30"}}},{"M24":{"bankCredit":null,"otherLoan":null,"otherCredit":null,"bankLoan":{"orgNums":1,"recordNums":2,"maxAmount":null,"longestDays":"60","longestDaysTime":"2017-04-22"}}}],"latestTime":"2017-08-31"}]}}]}
data = json.loads(jsonstr)
new_dict = {} m_dict = {} @singledispatch
def get_data_dict(obj):
return obj @get_data_dict.register(dict)
def _(obj):
# print("dict", obj)
for k, v in obj.items():
if k in m_dict.keys():
m_dict.setdefault(f"{k}_1", v)
else:
m_dict.setdefault(k, v)
get_data_dict(v) @get_data_dict.register(abc.MutableSequence)
def _(obj):
# print("seq", obj)
for item in obj:
get_data_dict(item) class Get_Data:
# 获取类名
def get_current_function_name(self):
return inspect.stack()[1][3] def __init__(self):
pass def attributes(self, obj):
# print(self.attributes.__code__.co_varnames) #可以获取当前方法有多少参数。
print("当前方法", self.get_current_function_name())
{new_dict.setdefault(k, v) for k, v in obj.items()} def blacklist(self, obj):
print("当前方法", self.get_current_function_name())
for dicts in obj:
for k, v in dicts.items():
if isinstance(v, list):
break
else:
new_dict.setdefault(k, v) def M(self, m, obj):
print("当前方法", self.get_current_function_name()) for k, v in obj.items():
if isinstance(v, dict):
for k2, v2 in v.items():
m_key = f"{m}_{k2}"
new_dict.setdefault(m_key, v2)
else:
new_dict.setdefault(k, v) def get_method(self):
return [i for i in dir(self) if not i.startswith(("__", "get"))] g = Get_Data()
method_list = g.get_method()
for k, v in data.items():
if k == "DATA":
data_dict = data[k]
get_data_dict(data_dict)
else:
new_dict.setdefault(k, v) for k, v in m_dict.items():
try:
if k in method_list or k.startswith("M"):
if k.startswith("M"):
eval("g." + "M")(k, v)
else:
eval("g." + k)(v)
except:
print(traceback.format_exc()) print(new_dict)

  

python字典解析的更多相关文章

  1. Python基础(冒泡、生成器、迭代器、列表与字典解析)

    一.冒泡算法 冒泡算法,给定一组数据,从大到小排序或者从小到大排序,就像气泡一样 原理:  相邻的两个对象相比,大的放到后面,交换位置 交换位置通过a,b=b,a来实现 1.我们可以通过for循环来根 ...

  2. python字典构造函数dict(mapping)解析

    Python字典的构造函数有三个,dict().dict(**args).dict(mapping),当中第一个.第二个构造函数比較好理解也比較easy使用, 而dict(mapping)这个构造函数 ...

  3. Python列表解析和字典解析

    python笔记_列表解析 相比于for循环,列表解析的语法是由底层c语言实现的,它和使用for循环遍历pyobject对象相比,性能会有很大的提升. 无条件子句的列表解析式 In [2]: [2*i ...

  4. 第4.4节 Python解析与推导:列表解析、字典解析、集合解析

    一.    引言 经过前几个章节的介绍,终于把与列表解析的前置内容介绍完了,本节老猿将列表解析.字典解析.集合解析进行统一的介绍. 前面章节老猿好几次说到了要介绍列表解析,但老猿认为涉及知识层面比较多 ...

  5. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

  6. Python XML解析(转载)

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  7. Python XML解析之ElementTree

    参考网址: http://www.runoob.com/python/python-xml.html https://docs.python.org/2/library/xml.etree.eleme ...

  8. python大法好——Python XML解析

    Python XML解析 什么是XML? XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识. 它也是元标记语言,即定义了用于定义其他与 ...

  9. python字典类型

    字典类型简介 字典(dict)是存储key/value数据的容器,也就是所谓的map.hash.关联数组.无论是什么称呼,都是键值对存储的方式. 在python中,dict类型使用大括号包围: D = ...

随机推荐

  1. CyclicBarrier用法

    CyclicBarrier和CountDownLatch一样,都是关于线程的计数器. 用法略有不同,测试代码如下: 1 public class TestCyclicBarrier { 2 3 pri ...

  2. BZOJ3155:Preprefix sum——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3155 最朴素的想法是两棵树状数组,一个记录前缀和,一个记录前缀前缀和,但是第二个我们非常不好修改 ...

  3. Generate Parentheses - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Generate Parentheses - LeetCode 注意点 解法 解法一:递归.当left>right的时候返回(为了防止出现 )( ) ...

  4. Android Support WorkManager使用详解

    使用WorkManager调度任务 WorkManager是一个库, 用以将工作入队, 当该工作的约束条件得到满足之后, WorkManager保证它的执行. WorkManager允许观测工作的状态 ...

  5. FastDFS分布式存储

    分布式存储分类 通用分布式存储:mogilefs, fastdfs, ...(无文件系统接口, 通过API访问) 专用分布式存储:即分布式文件系统, moosefs, ...(有文件系统接口) GFS ...

  6. HDU 1711 Number Sequence (字符串匹配,KMP算法)

    HDU 1711 Number Sequence (字符串匹配,KMP算法) Description Given two sequences of numbers : a1, a2, ...... , ...

  7. 目标检测应用化之web页面(YOLO、SSD等)

    在caffe源码目录下的examples下面有个web_demo演示代码,其使用python搭建了Flask web服务器进行ImageNet图像分类的演示. 首先安装python的依赖库:pip i ...

  8. 栈(C语言实现)

    栈是一种线性数据结构,顺序可能是 LIFO(后进先出)或 FILO(先进先出). 堆栈主要有三个基本操作: 1.push,把元素压入栈 2.pop,从栈中弹出元素(同时从栈中移除),最后加入的第一个被 ...

  9. 130. Surrounded Regions(M)

    130.Add to List 130. Surrounded Regions Given a 2D board containing 'X' and 'O' (the letter O), capt ...

  10. HDU 6231

    K-th Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...