使用 python 时,我的递归函数在打印出 JSON 文件时无法正确放置选项卡。我该如何解决它?



My function

def string_info(json_info, string):
if type(json_info) == dict:
for key in json_info.keys():
other = string_info(json_info[key], "")
string += f"n{key}:t{other}"
elif type(json_info) == list:
for index in range(0, len(json_info)):
string += f"{json_info[index]} "
else:
string += f"{json_info}"
return string

示例 JSON

"statistics": {
"level": {
"current": 100,
"progress": 52
},
"pp": 5934,
"pp_rank": 15496,
"ranked_score": 15283968302,
"hit_accuracy": 98.3355,
"play_count": 76169,
"play_time": 3855235,
"total_score": 79160699555,
"total_hits": 13126452,
"maximum_combo": 2104,
"replays_watched_by_others": 24,
"is_ranked": true,
"grade_counts": {
"ss": 51,
"ssh": 22,
"s": 1202,
"sh": 224,
"a": 1272
},
"rank": {
"global": 15496,
"country": 2553
}
}

我的输出


level:  
current:    100
progress:   52
pp: 5934
pp_rank:    15496
ranked_score:   15283968302
hit_accuracy:   98.3355
play_count: 76169
play_time:  3855235
total_score:    79160699555
total_hits: 13126452
maximum_combo:  2104
replays_watched_by_others:  24
is_ranked:  True
grade_counts:   
ss: 51
ssh:    22
s:  1202
sh: 224
a:  1272
rank:   
global: 15496
country:    2553

似乎每行的选项卡大小都不相同,我期待输出更多


level:  
current:   100
progress:   52
pp:   5934
pp_rank:   15496
ranked_score:   15283968302
hit_accuracy:   98.3355
play_count:   76169
play_time:   3855235
total_score:   79160699555
total_hits:   13126452
maximum_combo:   2104
replays_watched_by_others:   24
is_ranked:   True
grade_counts:   
ss:   51
ssh:   22
s:   1202
sh:   224
a:   1272
rank:   
global:   15496
country:   2553

我对使用 python 编程很陌生,我想知道我犯了什么错误,选项卡不一致并且输出中的间距不符合我的预期。感谢您的任何帮助。

(此外,if 的 if 语句适用于我可能从 JSON 获得的其他类型的数据(

# fixed tab = 3 spaces
mytab = ' '*3
def string_info(json_info):
string = ""
if type(json_info) == dict:
for key, value in json_info.items():
other = string_info(value)
other_tabbed = f'n{mytab}'.join(other.split('n'))
string += f"n{key}:{mytab}{other_tabbed}"
elif type(json_info) == list:
for index in range(0, len(json_info)):
string += f"{json_info[index]} "
else:
string += f"{json_info}"
return string

# test
import json
s = '''
{
"statistics": {
"level": {
"current": 100,
"progress": 52
},
"pp": 5934,
"pp_rank": 15496,
"ranked_score": 15283968302,
"hit_accuracy": 98.3355,
"play_count": 76169,
"play_time": 3855235,
"total_score": 79160699555,
"total_hits": 13126452,
"maximum_combo": 2104,
"replays_watched_by_others": 24,
"is_ranked": true,
"grade_counts": {
"ss": 51,
"ssh": 22,
"s": 1202,
"sh": 224,
"a": 1272
},
"rank": {
"global": 15496,
"country": 2553
}
}
}
'''
data = json.loads(s)
print(string_info(data))

输出:

statistics:   
level:   
current:   100
progress:   52
pp:   5934
pp_rank:   15496
ranked_score:   15283968302
hit_accuracy:   98.3355
play_count:   76169
play_time:   3855235
total_score:   79160699555
total_hits:   13126452
maximum_combo:   2104
replays_watched_by_others:   24
is_ranked:   True
grade_counts:   
ss:   51
ssh:   22
s:   1202
sh:   224
a:   1272
rank:   
global:   15496
country:   2553

最新更新