1、首先是输入,我写了一个json文件来作为输入,结构如下
{
"第一级" : {
"第二级第1个" : "null",
"第二级第2个" : {
"第三级第1个" : "null"
},
"第二级第3个" : {
"第三级第2个" : "null",
"第三级第3个" : {
"第四级第1个" : "null",
"第四级第2个" : "null"
}
},
"第二级第4个" : {
"第三级第4个" : "null",
"第三级第5个" : "null",
"第三级第6个" : "null"
},
"第二级第5个" : "null",
"第二级第6个" : "null"
}
}
没有子级的json属性我写的是null,为了方便判断当前键的属性是不是json,不要太在意。
2、求层级
一个不规则的树形结构,有多个不同深度的分支,我们首先要想办法把这些不同的深度进行一个比较,才能得到最深的分支的值,代码如下:
先将json转换为python字典,方便后续使用:
# 读取json文件
filepath = 'G:/0073/readjsontest.json'
obj = open(filepath, mode='r', encoding='utf-8')
# 转换为python字典
JsonData = obj.read()
然后对字典进行递归遍历,在比较值为非null时,将值(子字典)进行递归,并对叠加变量+1,在对所有子级遍历完成后,函数会逐级比较大小,留下较大的层级值,存放在maxh变量中,最后将其返回:
def getJsonSize(jsondata, h = 1, maxh = 0, size = 0):
# 遍历 字典 中的 键值对
for tmp in jsondata:
# 如果 值 为字典则深度 +1 进行递归
if jsondata[tmp] != "null":
# 接收深度 接收保存的最大深度
size, maxh = getJsonSize(jsondata[tmp], h + 1, maxh)
# 判断此分支深度是否大于已保存的最大深度
if size >= maxh:
maxh = size
# 返回最大深度
return h, maxh
3、输出
运行后输出如下,最大层级为4,符合最上面输入的json文件中的json字符串的最大深度:
第二个返回值就是此json的最大深度。