如何在Python中递归JSON文件而不使用任何循环(如:for,while等)



我很困惑如何在Python3中创建递归函数来打印JSON文件而没有任何循环。

我的大学作业是关于函数中的递归,老师让我只用递归来代替循环。

我的json文件在类别。json是:

[{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'},
{'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'},
{'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'},
{'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'},
{'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'},
{'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'},
{'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'},
{'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'},
{'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'},
{'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'},
{'catId': 1, 'id': 11, 'name': 'Buku Taman'},
{'catId': 2, 'id': 12, 'name': 'Persiapan Tes CPNS'},
{'catId': 2, 'id': 13, 'name': 'Persiapan Tes TOELF & IELTS'},
{'catId': 2, 'id': 14, 'name': 'Persiapan TPA & Psikotest'},
{'catId': 3, 'id': 15, 'name': 'Buku Aktivitas'},
{'catId': 3, 'id': 16, 'name': 'Buku Cerita Anak'},
{'catId': 3, 'id': 17, 'name': 'Buku Dongeng'},
{'catId': 3, 'id': 18, 'name': 'Buku Dunia Pengetahuan'},
{'catId': 3, 'id': 19, 'name': 'Buku Fabel'}]
我的python代码是:
import json
def showData(file):
file_json = open(file)
data = json.loads(file_json.read())
return data
print(showData("Category.json"))

我还没有完成我的代码,因为我仍然困惑如何做递归没有循环。

你知道吗?

我不明白为什么你需要使用recursion来打印JSON文件而不是iterations(for, while).

这是如何使用递归打印数据.

d = [{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'},
{'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'},
{'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'},
{'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'},
{'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'},
{'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'},
{'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'},
{'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'},
{'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'},
{'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'}]
# Recursive Code
def print_json(j):
# Base condition
if len(j) == 0:
return
# Print the first item of j
print(j[0])
# Call the same function on j[1:]
# Skipping the first item of j in every call
print_json(j[1:])

print_json(d)
{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'}
{'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'}
{'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'}
{'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'}
{'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'}
{'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'}
{'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'}
{'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'}
{'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'}
{'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'}

你知道递归在内部使用递归堆栈吗?

这是递归代码的一些额外空间开销。

我不确定我是否正确理解了这个问题。要使用不同的打印语句打印每个字典吗?

在我看来,你是想为简单的事情做复杂的事情。由于没有嵌套数据,因此可以通过在递归函数中传递整个列表来进行递归,然后只打印第一个元素,并将列表的其余部分再次传递回递归函数。

def recursive_print(datas):
print(datas[0])
if len(datas) > 1:
recursive_print(datas[1:])
我误解了你的问题。

最新更新