Создание цикла для подкатегорий
Имею json список объектов и беда в том что в нем есть подкатегории. Казалось бы вытянул название категории, вытянул подкатегории, но не могу создать цикл для подкатегории, и вообще все это превращается в кашу малашу из-за недостатка опыта в создании циклов. Помогите пожалуйста верно вывести данные.
category_usbAndDisks = catalogData[3]
category_usbAndDisks_childrens = category_usbAndDisks['childrens']
category_usbAndDisks_childrens_childrens = category_usbAndDisks_childrens[0]
# ФЛЭШ ПАМЯТЬ, ВНЕШНИЕ ДИСКИ, ПРИВОДЫ
name = category_usbAndDisks['name']
id = category_usbAndDisks['id']
current_catalogData = {
"categoryid": id,
"externalid": id,
"name": name,
"parentcategory": parentId
}
completed_data = json.dumps(raw_data_list)
raw_data_list.append(current_catalogData)
parentId = 0
# Выгрузка подкатегорий категории ФЛЭШ ПАМЯТЬ, ВНЕШНИЕ ДИСКИ, ПРИВОДЫ
for i in category_usbAndDisks_childrens:
name = i['name']
id = i['id']
parentId = i['parentId']
catalog_data = {
"categoryid": id,
"externalid": id,
"name": name,
"parentcategory": parentId
}
raw_data_list.append(catalog_data)
completed_data = json.dumps(raw_data_list)
#Здесь начинается неудачная попытка вывести подкатегорию подкатегории.
childrens = []
for i in category_usbAndDisks_childrens[i]:
for i in category_usbAndDisks_childrens['childrens']:
name = i['name']
id = i['id']
parentId = i['parentId']
catalog_data = {
"categoryid": id,
"externalid": id,
"name": name,
"parentcategory": parentId
}
childrens.append(catalog_data)
completed_data = json.dumps(childrens)
i += 1
Вид json файла откуда вытягиваю данные:
Ответы (2 шт):
Если я правильно понял, то тебе нужен последний уровень вложенности
Твой JSON мне нужен был чтобы не писать то, что в твоем скриншоте
В файле test.json у меня вот этот кусок твоего JSON-файла
Код:
from json import load
from pprint import pprint
with open("test.json", "r", encoding="utf-8") as f:
data = load(f)
data_subcategories = [item for item in data["childrens"][0]["childrens"]]
pprint(data_subcategories)
Результат:
[{'id': 180, 'leaf': True, 'name': '2 GB', 'parentId': 165},
{'id': 182, 'leaf': True, 'name': '4 GB', 'parentId': 165},
{'id': 183, 'leaf': True, 'name': '8 GB', 'parentId': 165},
{'id': 184, 'leaf': True, 'name': '16 GB', 'parentId': 165},
{'id': 185, 'leaf': True, 'name': '32 GB', 'parentId': 165},
{'id': 186, 'leaf': True, 'name': '64 GB и более', 'parentId': 165}]
В следующий раз, пожалуйста, пиши конкретнее, что нужно вывести
for i in category_usbAndDisks_childrens:
for i in category_usbAndDisks_childrens[i]:
for i in category_usbAndDisks_childrens['childrens']:
У вас проблемы из-за того, что:
- вы называете переменные во всех циклах одинаково, так что они "перекрывают" друг друга (ещё и называете не "говорящим" именем
i, что бывает допустимо, но не в этом случае) - вы не очень понимаете, что хотите сделать
Конструкция циклов должна быть примерно такая, чтобы вы начали во всём этом разбираться:
for category in category_usbAndDisks:
print('Category name', category['name'])
...
for subcategory in category['childrens']:
print('Subcategory name', subcategory['name'])
...
for items in subcategory['childrens']:
print('Item name', item['name'])
...
Т.е.:
- называете перебираемые в цикле сущности понятным образом
- используете внутри цикла эту сущность, в том числе для работы с вложенными в неё другими сущностями через вложенный цикл
Это не всегда оптимальный вариант перебора объектов json, но от него можно начать хоть куда-то двигаться и понимать, что вы делаете.
