Python3自定义json逐层解析器
2018-08-01 22:39
645 查看
[本文出自天外归云的博客园]
用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字符串。
设计思路:
相关文章推荐
- python Json的一点收获,自定义序列化方法
- python Json的一点收获,自定义序列化方法
- Python json.dumps 特殊数据类型的自定义序列化操作
- SpringBoot自定义json解析器
- 【Python学习】自定义对象转JSON
- python Json的一点收获,自定义序列化方法
- Python中JSON在解析的同时进行自定义编码处理
- Spring-Boot(一):使用自定义json解析器
- python自定义类型转json
- SpringBoot使用自定义json解析器的使用方法
- Json概述以及python对json的相关操作
- Python3 的json 和 PHP的json
- Python入门的36个例子 之 34 -> Raise An Error – 自定义异常信息
- python 写json格式字符串到文件
- python json.load和json.loads的区别
- 200行自定义python异步非阻塞Web框架
- scrapy将爬取的python数据用jsonExceldatabase显示
- python模块 json