python 结构化数据解析
# -*- coding: utf-8 -*-
# @Time : 2018/8/31 14:32
# @Author : cxa
# @File : glomtest.py
# @Software: PyCharm
from glom import glom, Coalesce
import simplejson as sj
import pprint
jsonstr = """{"CERT_ID": "32143434", "CERT_NAME": "ssss", "PROD_ID": "CREDIT", "MP": "10086",
"TRANS_INFO": "20180911", "DATA": [{"attributes": {"CR_PS_MC_LM24": 0.0, "CR_TR_TR_LM24": 0.0,
"CD_AL_IS_LM24": 1.0, "CD_CC_AL_LM12": 0.0,
"CR_DC_OGO2_LM12": 0.0, "CR_EX_EP_LM06": 0.0,
"CR_CC_CS_LM03": 0.0}
}, {"blacklist": {}}, {
"loan": {"record": [
{"matchType": "phone", "matchValue": "1204",
"matchId": "CDGFHHSSSFAFRFRFRRFR",
"classification": [{"M9": {
"other": {"orgNums": 1, "loanAmount": null,
"totalAmount": null, "repayAmount": null,
"latestLoanTime": null}, "bank": null}},
{"M12": {"other": {"orgNums": 2,
"loanAmount": null,
"totalAmount": null,
"repayAmount": null,
"latestLoanTime": null},
"bank": null}}],
"latestRepaySuccessTime": null}]}}, {"overdue": {}}]}"""
def get_last_str(jsonstr):
new_dict = {}
last_dict = dict(sj.loads(f'{jsonstr}'))
spec = {
'attributes': ('DATA', [Coalesce('attributes', default=None)]),
'loan': ('DATA', [Coalesce(('loan.record', [
Coalesce(('classification', [Coalesce(*([f'M{i}.other' for i in range(1, 999)]),*([f'M{i}.bankLoan' for i in range(1, 999)]), default=None)]),
default=None)]), default=None)])
}
gm = glom(last_dict.copy(), spec,default="出错了")
for k, v in last_dict.items():
if not isinstance(v, (list, dict)):
new_dict.setdefault(k, v)
else:
for v2 in v:
for k3, v3 in v2.items():
if isinstance(v3, dict):
if v3:
if "record" in v3.keys():
recordstr = glom(v3, ('record', [Coalesce('classification', default=None)],
[[Coalesce(*([f'M{i}.other' for i in range(1, 999)]),*([f'M{i}.bankLoan' for i in range(1, 999)]),
default=None)]]))
for l in recordstr[0]:
try:
new_dict.update(
{f"{lk}_1" if lk in new_dict.keys() else lk: lv for lk, lv in l.items()})
except:
pass
else:
new_dict.update(
{f"{lk}_1" if lk in new_dict.keys() else lk: lv for lk, lv in v3.items()})
return str(new_dict)
python 结构化数据解析的更多相关文章
- Python爬虫(九)_非结构化数据与结构化数据
爬虫的一个重要步骤就是页面解析与数据提取.更多内容请参考:Python学习指南 页面解析与数据提取 实际上爬虫一共就四个主要步骤: 定(要知道你准备在哪个范围或者网站去搜索) 爬(将所有的网站的内容全 ...
- [Python]ctypes+struct实现类c的结构化数据串行处理
1. 用C/C++实现的结构化数据处理 在涉及到比较底层的通信协议开发过程中, 往往需要开发语言能够有效的表达和处理所定义的通信协议的数据结构. 在这方面是C/C++语言是具有天然优势的: 通过str ...
- 零基础学Python之结构化数据(附详细的代码解释和执行结果截图)
3结构化数据 字典(查找表).集合.元组.列表 3.1字典 是有两列任意多行的表,第一列存储一个键,第二列存储一个值. 它存储键/值对,每个唯一的键有一个唯一与之关联的值.(类似于映射.表) 它不会维 ...
- 详解Google-ProtoBuf中结构化数据的编码
本文的主要内容是google protobuf中序列化数据时用到的编码规则,但是,介绍具体的编码规则之前,我觉得有必要先简单介绍一下google protobuf.因此,本文首先会介绍一些google ...
- [转] Protobuf高效结构化数据存储格式
从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结.下面的操作以C++为编程语言,protoc的版本为libprotoc 3.2.0. 一.Protobuf? 1. 是什么? Goo ...
- 利用Gson和SharePreference存储结构化数据
问题的导入 Android互联网产品通常会有很多的结构化数据需要保存,比如对于登录这个流程,通常会保存诸如username.profile_pic.access_token等等之类的数据,这些数据可以 ...
- TensorFlow从1到2(六)结构化数据预处理和心脏病预测
结构化数据的预处理 前面所展示的一些示例已经很让人兴奋.但从总体看,数据类型还是比较单一的,比如图片,比如文本. 这个单一并非指数据的类型单一,而是指数据组成的每一部分,在模型中对于结果预测的影响基本 ...
- Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)
一.SolrJ介绍 1. SolrJ是什么? Solr提供的用于JAVA应用中访问solr服务API的客户端jar.在我们的应用中引入solrj: <dependency> <gro ...
- Spark读取结构化数据
读取结构化数据 Spark可以从本地CSV,HDFS以及Hive读取结构化数据,直接解析为DataFrame,进行后续分析. 读取本地CSV 需要指定一些选项,比如留header,比如指定delimi ...
随机推荐
- BZOJ5389 比例查询 【离线】
题目链接 BZOJ5389 题解 太\(sb\)了,这种题都想不出来 发现复杂度允许\(n\sqrt{n}\),我们可以对于每个位置\(\sqrt{n}\)枚举约数,然后维护比例的最晚出现的位置,维护 ...
- tomcat和servlet的基本了解
看不清的可以下载到本地观看
- bzoj 2243
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 8800 Solved: 3305[Submit][Status ...
- Hadoop部署方式-高可用集群部署(High Availability)
版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...
- 二叉树(前序,中序,后序,层序)遍历递归与循环的python实现
二叉树的遍历是在面试使比较常见的项目了.对于二叉树的前中后层序遍历,每种遍历都可以递归和循环两种实现方法,且每种遍历的递归实现都比循环实现要简洁.下面做一个小结. 一.中序遍历 前中后序三种遍历方法对 ...
- java8 新特性 Stream
1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...
- 转:iPhone上关于相机拍照的图片的imageOrientation的问题
用相机拍摄出来的照片含有EXIF信息,UIImage的imageOrientation属性指的就是EXIF中的orientation信息.如果我们忽略orientation信息,而直接对照片进行像素处 ...
- Vue组件穿透
1. element ui怎么修改单独一个label的颜色 用 >>> 进行组件的穿透
- Mongodb 笔记06 副本集的组成、从应用程序连接副本集、管理
副本集的组成 1. 同步:MongoDB的复制功能是使用操作日志oplog实现的,操作日志包含了主节点的每一次写操作.oplog是主节点的local数据库中的一个固定集合.备份节点通过查询整个集合就可 ...
- centos7 install python3.7 with problem and how to fix it.
问题如下: configure: error: no acceptable C compiler found in $PATH 缺少gcc zipimport.ZipImportError: can’ ...