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 jsonfrom collections import Mappingimport jsondef 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 delif isinstance(value, list):if len(value) == 0:yield pre+[key, ‘[]’]else:for v in value:for d in dict_generator(v, pre + [key]):yield delif isinstance(value, tuple):if len(value) == 0:yield pre+[key, ‘()’]else:for v in value:for d in dict_generator(v, pre + [key]):yield delse:yield pre + [key, value]else:yield indictdef 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, key, paths=(paths + [(‘k’, k)]))ret += found_itemselif isinstance(obj, (list, tuple)):for i, v in enumerate(obj):found_items = recursive_findall(v, key, paths=(paths + [(‘i’, i)]))ret += found_itemselse:if key(obj):ret.append((paths, obj))return retret_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 = 0for 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: continueret = dict_generator(ret_dict)print(ret)for i in ret: print i[-1]
以上这篇python json 递归打印所有json子节点信息的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持好吧啦网。
相关文章:
1. SXNA RSS Blog 聚合器程序2. ASP.NET MVC限制同一个IP地址单位时间间隔内的请求次数3. ASP.NET MVC增加一条记录同时添加N条集合属性所对应的个体4. android 使用Xml文件定义Shape方式5. python实现自动化脚本编写6. Java利用httpclient通过get、post方式调用https接口的方法7. Biblibili视频投稿接口分析并以Python实现自动投稿功能8. 利用VS2019创建Web项目并发送到IIS及IIS与ASP.NET配置教程9. php去掉数组的第一个值的两个函数:array_shift、array_splice10. Java接口测试Cookie与token原理解析
