直接上代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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某层节点的和实例
如下所示:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
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}]}] |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
},{ "email": "", "repoCommits": [ { "branchCommitLine": [ { "submitLine": 1 }, { "submitLine": 1 }]}, { "branchCommitLine": [ { "submitLine": 1 }, { "submitLine": 1 }]}]} ] } |
if name == ‘main':
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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] |