1. 程式人生 > 程式設計 >python json 遞迴列印所有json子節點資訊的例子

python json 遞迴列印所有json子節點資訊的例子

我就廢話不多說了,直接上程式碼吧

def json_txt(self,dic_json):
 #self.debug_print("json_txt")
 if isinstance(dic_json,dict): # 判斷是否是字典型別isinstance 返回True false
  for key in dic_json:
   #dic_json = json.loads(s)
   s = dic_json[key]
   #self.debug_print(str(len(s)) + " type:" + str(type(s)))
   t=str(type(s))
   if t.startswith("<class 'list'>"):
    for i in range(0,len(s)):
     self.debug_print("%s %d:" % (key,i))
     self.json_txt(s[i])
   else:
    self.debug_print("%s: %s" % (key,s))
 else:
  self.debug_print("else")

補充拓展:python求json某層節點的和例項

如下所示:

import json

from collections import Mapping

import json

def dict_generator(indict,pre=None):
pre = pre[:] if pre else []
if isinstance(indict,dict):
for key,value in indict.items():
if isinstance(value,dict):
if len(value) == 0:
yield pre+[key,‘{}']
else:
for d in dict_generator(value,pre + [key]):
yield d
elif isinstance(value,list):
if len(value) == 0:
yield pre+[key,‘[]']
else:
for v in value:
for d in dict_generator(v,tuple):
if len(value) == 0:
yield pre+[key,‘()']
else:
for v in value:
for d in dict_generator(v,pre + [key]):
yield d
else:
yield pre + [key,value]
else:
yield indict

def recursive_findall(obj,key,paths=None):
ret = []
if not paths:
paths = []
if isinstance(obj,Mapping):
for k,v in obj.iteritems():
found_items = recursive_findall(v,paths=(paths + [(‘k',k)]))
ret += found_items
elif isinstance(obj,(list,tuple)):
for i,v in enumerate(obj):
found_items = recursive_findall(v,paths=(paths + [(‘i',i)]))
ret += found_items
else:
if key(obj):
ret.append((paths,obj))
return ret

ret_dict = {
“data”:[
{
“email”:"",“repoCommits”:[
{
“branchCommitLine”:[
{
“submitLine”:1
},{
“submitLine”: 1
}]},{
“branchCommitLine”: [
{
“submitLine”: 1
},{
“submitLine”: 1
}]}]
        },{
  "email": "","repoCommits": [
   {
    "branchCommitLine": [
     {
      "submitLine": 1
     },{
      "submitLine": 1
     }]},{
    "branchCommitLine": [
     {
      "submitLine": 1
     },{
      "submitLine": 1
     }]}]

 }



    ]
   }

if name == ‘main':

all_socre = 0
for da in ret_dict["data"]:
 if da.has_key("repoCommits"):
  for repo in da["repoCommits"]:
   if repo.has_key("branchCommitLine"):
    for branch in repo["branchCommitLine"]:
     if branch.has_key("submitLine"):
      all_socre += int(branch["submitLine"])
     else:
      continue
   else:
    continue
 else:
  continue
ret = dict_generator(ret_dict)
print(ret)
for i in ret:
 print i[-1]

以上這篇python json 遞迴列印所有json子節點資訊的例子就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。