Python3自定义json逐层解析器
[本文出自天外归云的博客园]
用python3对json内容逐层进行解析,拿中国天气网的接口返回数据测试,代码如下:
# -*- coding: utf-8 -*-
import operator as op
from collections import defaultdict class Json(object): def __init__(self, json: str):
sth = eval(json)
load = lambda sth: sth if op.eq(type(sth).__name__, dict.__name__) else None
self.json_dict = load(sth)
self.ret_j = defaultdict(dict)
self.analyze(self.json_dict) def analyze(self, j_dict: dict, lvl=0) -> None:
lvl += 1
for k in j_dict:
v = j_dict[k]
v_type = type(v)
try:
self.ret_j[lvl][str(j_dict)].append(f"{k}:{v}")
except:
self.ret_j[lvl][str(j_dict)] = []
self.ret_j[lvl][str(j_dict)].append(f"{k}:{v}")
if op.eq(v_type.__name__, dict.__name__):
self.analyze(v, lvl)
elif op.eq(v_type.__name__, list.__name__):
for each in v:
if op.eq(type(each).__name__, dict.__name__):
self.analyze(each, lvl) def get_analysis(self) -> None:
print(f"这个json拢共分{len(self.ret_j)}层")
print("------")
for lvl in self.ret_j:
print(f"第{lvl}层解析")
for root in self.ret_j[lvl]:
print(f"解析内容:{root}")
for each in self.ret_j[lvl][root]:
print(each)
print("------") if __name__ == '__main__':
try:
import requests
except:
exit(0)
url = "http://forecast.weather.com.cn/napi/h5map/city/101/jQuery1533133004035?callback=jQuery1533133004035"
r = requests.get(url)
d_r = r.content.decode()
json_4_test = d_r[d_r.index("(") + 1:d_r.index(")")]
Json(json_4_test).get_analysis()
其中json_4_test是待解析的json字符串。
设计思路:

Python3自定义json逐层解析器的更多相关文章
- Spring boot中自定义Json参数解析器
转载请注明出处... 一.介绍 用过springMVC/spring boot的都清楚,在controller层接受参数,常用的都是两种接受方式,如下 /** * 请求路径 http://127.0. ...
- 一步一步自定义SpringMVC参数解析器
随心所欲,自定义参数解析器绑定数据. 题图:from Zoommy 干货 SpringMVC解析器用于解析request请求参数并绑定数据到Controller的入参上. 自定义一个参数解析器需要实现 ...
- php 解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)
$str2='{"code":200,"datas":{"id":1,"coupon_id":"123&quo ...
- 自定义HandlerMethodArgumentResolver参数解析器和源码分析
在初学springmvc框架时,我就一直有一个疑问,为什么controller方法上竟然可以放这么多的参数,而且都能得到想要的对象,比如HttpServletRequest或HttpServletRe ...
- 自定义springmvc参数解析器
实现spring HandlerMethodArgumentResolver接口 通过使用@JsonArg自定义注解来解析json数据(通过fastjson的jsonPath),支持多个参数(@Req ...
- 实现自定义的参数解析器——HandlerMethodArgumentResolver
1.为什么需要自己实现参数解析器 我们都知道在有注解的接口方法中加上@RequestBody等注解,springMVC会自动的将消息体等地方的里面参数解析映射到请求的方法参数中. 如果我们想要的信息不 ...
- Python3基础 json.loads 解析json格式的数据,得到一个字典
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3之JSON数据解析实例:新闻头条 --Python3
一.接口相关 数据服务商:聚合数据(https://www.juhe.cn/) API部分文档: 完整API文档下载:https://files.cnblogs.com/files/qikeyishu ...
- [转载]开发 Spring 自定义视图和视图解析器
原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP ...
随机推荐
- Django 学习第二天——URL路由及模板渲染方式
URL 的概念及格式: URL的引入:客户端:知道了url 就可以去进行访问: 服务端:设置好了url,别人才能访问到我 URL :网址(全球统一资源定位符):由 协议,域名(ip port) ,路径 ...
- vue那些事儿
本篇文章基于vue2,vuejs不支持ie8,因为es5的Object.defineProperty特性不被ie8支持,而vue正是使用Object.defineProperty把遍历过的data属性 ...
- BZOJ.2287.[POJ Challenge]消失之物(退背包)
BZOJ 洛谷 退背包.和原DP的递推一样,再减去一次递推就行了. f[i][j] = f[i-1][j-w[i]] + f[i-1][j] f[i-1][j] = f[i][j] - f[i-1][ ...
- 洛谷.1110.[ZJOI2007]报表统计(Splay Heap)
题目链接 附纯SplayTLE代码及主要思路: /* 可以看做序列有n段,Insert是每次在每一段最后插入一个元素 只有插入,没有删除,所以插入一个元素对于询问1影响的只有该元素与前边一个元素(同段 ...
- Chrome for Mac键盘快捷键!来自Google Chrome官网!
⌘-N 打开新窗口. ⌘-T 打开新标签页. ⌘-Shift-N 在隐身模式下打开新窗口. 按 ⌘-O,然后选择文件. 在 Google Chrome 浏览器中打开计算机中的文件. 按住 ⌘ 键,然后 ...
- Problem C: 找气球
Description zstu集训队经常举办月赛,但是气球经常不够.现有多个桶,每个桶有一种颜色,每个桶可能对应多个题,给定每个题对应的桶,打比赛的时候,经常某道题被发现是水题,但是该颜色的气球没有 ...
- css3 flex布局结合transform生成一个3D骰子
预览地址: https://zhaohh.github.io/flex-dice/index.html 1 Flex 布局 首先聊聊Flex 布局,Flex 布局又称"弹性布局", ...
- 回顾MySQL中的事务特征
一.事务定义Transaction事务:一个最小的不可再分的工作单元:通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)一个完整的业务需要批量的DML(insert. ...
- Simple PWM to Analog Circuit (0-10vdc)
i just finished this simple circuit and am very satisfied with the result. The output is very stable ...
- WordPress主题开发实例:利用侧边栏工具显示联系方式
利用侧边栏显示联系方式是很方便的 一.先开启侧边栏工具,在functions.php加上 $args = array( 'name' => __( '分类侧边栏'), 'id' => 'c ...