Python3自定義json逐層解析器

2022-01-18 03:05:30 字數 1841 閱讀 4213

[本文出自天外歸雲的]

用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:":

")except

: self.ret_j[lvl][str(j_dict)] =":

")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攏共分層")

print("

------")

for lvl in

self.ret_j:

print(f"

第層解析")

for root in

self.ret_j[lvl]:

print(f"

解析內容:")

for each in

self.ret_j[lvl][root]:

print

(each)

print("

------")

if__name__ == '

__main__':

try:

import

requests

except

: exit(0)

url = "

"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自定義函式

一 什麼是函式 函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段。函式能提高應用的模組性,和 的重複利用率。你已經知道python提供了許多內建函式,比如print 但你也可以自己建立函式,這被叫做使用者自定義函式。語法def 函式名 引數列表 函式體def func print 王小...

python3 自定義比較函式

python 2 中支援類似 c 中 cmp 的寫法 python 3 放棄了這一用法 官方說明 所以不想寫lambda的話,加一句cmp to key 就行了 def 比較函式 return 原來的方式是 sorted cmp 比較函式 現在的方式是 from functools import c...

python3 自定義比較器

摘要 在一些場景中,需要重新對已有的資料排序,可能所給出的資料型別或者資料數量較多,需要給定排序規則。import functools def by score t1,t2 if t1 0 t2 0 return 1 elif t1 0 t2 1 return 1 elif t1 1 t2 1 re...