Python3自定义json逐层解析器

用python3对json内容逐层进行解析,拿中国天气网的接口返回数据测试,代码如下:

# -*- coding: utf-8 -*-
import operator as op
from collections import defaultdict, deque

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字符串。

原文地址:https://www.cnblogs.com/LanTianYou/p/9404415.html

时间: 2024-11-09 05:52:30

Python3自定义json逐层解析器的相关文章

SpringMVC自定义多视图解析器

实现通过请求url后缀判断返回值类型, 例如 localhost:8080/list 返回JSP页面, localhost:8080/list.json返回json格式数据 1.创建一枚举返回值类型 public enum ResultType { REDIRECT, JSP, JSON, XML } 2.创建自定义的viewResolver 1 public class JsonViewResolver implements ViewResolver { 2 3 private View vi

使用自定义的任务解析器

有时候我们想为activiti中每个任务绑定一个类似全局监听器的东西,但是又不能每次手动为任务添加监听器(太繁琐了),所以就会用到自定义的任务解析器. 先看activiti的配置,这样可以用自定义的任务解析器代替activiti默认的任务解析器(原理可以自行查询源码) <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"

Spring自定义argumentResolver参数解析器

在一个web程序中,当一个HTTP请求进来时,会被容器处理进而转换成一个servlet请求.http请求所携带的数据,虽然是格式化的但是无类型:而java作为强类型语言,同时为了健壮性考虑,必然要有完善的类型约束.当然,那么,将数据从servlet请求中转换到java中,一个很原始的方式是手动处理.幸好,Spring MVC通过以注解往函数添加额外信息的方式,使得上述的数据转换过程能够交由框架自动处理.从一个角度去看,Controller中的函数声明及注解定义了此HTTP请求的数据格式和类型,也

[转载]开发 Spring 自定义视图和视图解析器

原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP.Velocity 视图等,但在某些情况下,我们需要开发自定义的视图及其解析器,以便显示特殊文件格式的视图,我们也可以使用自定义视图及解析器,针对特定的视图做相应的处理.本文将通过一个示例来介绍如何开发 Spring 自定义视图和视图解析器,来显示后缀名为 SWF 的视图,并提供一个简单的注册机制,

自定义表达式解析器

解析器: import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; imp

Spring 4 MVC 视图解析器(XML JSON PDF等) 纯注解(带源码)【推荐】

原文地址:http://websystique.com/springmvc/spring-4-mvc-contentnegotiatingviewresolver-example/ [本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看.源码下载地址在文章末尾.] [翻译 by 明明如月 QQ 605283073] 下一篇:Spring 4 MVC @RestController 注解实现REST Service 上一篇:Spring 4 MVC 表单校验资源处理(带源码)

SpringMVC自动封装List对象——自定义参数解析器

前台传递的参数为集合对象时,后台Controller希望用一个List集合接收数据. 原生SpringMVC是不支持,Controller参数定义为List类型时,接收参数会报如下错误: org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface at org.springframework.beans.B

Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)

一.url控制 基本路由写法:最常用 from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^books/', views.Books.as_view()), url(r'^book/', views.Book.as_view()), url(r'^login/

基于Spring开发——自定义标签及其解析

1. XML Schema 1.1 最简单的标签 一个最简单的标签,形式如: <bf:head-routing key="1" value="1" to="test2"/> 该标签只包含了若干属性,我们就在xsd文件中这么定义 <!-- 声明一个标签,名字为head-routing,他的类型为headRouting--> <xsd:element name="head-routing" type=