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 ...
随机推荐
- HDU 6184 Counting Stars
Problem Description Little A is an astronomy lover, and he has found that the sky was so beautiful!S ...
- 从商用到开源:15个维度,全面剖析DB2与MySQL数据库的差异
随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多.进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据类型之间的转换. 相关阅读: 从商用到开 ...
- Luogu 3385 负环 | 我有特别的SPFA技巧
这样似乎跑得快: 初始化所有的dis是0,然后枚举每个点作为起点,用DFS更新所有点的dis: 如果更新到一个栈中节点,那么有负环. #include <cstdio> #include ...
- loj2542 「PKUWC2018」随机游走 【树形dp + 状压dp + 数学】
题目链接 loj2542 题解 设\(f[i][S]\)表示从\(i\)节点出发,走完\(S\)集合中的点的期望步数 记\(de[i]\)为\(i\)的度数,\(E\)为边集,我们很容易写出状态转移方 ...
- 将SQL Server账户对应到Windows系统账户
应用场景举例: SQL Server账户要访问外部资源,例如所拥有的Job要访问文件系统,而此文件系统需要Windows账户才有权限. 步骤: 1. 服务器新建凭据(Credentials ...
- openssl md5 sha256 rsa des
原文地址找不到了 #include <windows.h>#include <iostream>#include <cassert> #include <st ...
- 使用IDEA复用代码时常见问题
使用IDEA复用代码时常见问题 觉得有用的话,欢迎一起讨论相互学习~Follow Me 作为新手在直接复用别人的java代码并使用IDEA进行二次开发时,经常出现一些奇怪的问题,在此做一些总结~ In ...
- 安装VisualSVN Server 报错The specified TCP port is occupied
安装过程中报错,如下图所示. The specified TCP port is occupied by another service.Please stop that service or use ...
- [IOI2011]Race
2599: [IOI2011]Race Time Limit: 70 Sec Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem ...
- windows下自动启动Redis隐藏命令行窗口
这段时间看了看关于Redis的相关内容,对于Redis在windows下的安装和常规启动我就不多说了.可以参考其他的博客http://www.cnblogs.com/edisonchou/p/3821 ...