æ¦è¿°
âæ âå¨è®¡ç®æºçä¸çéæ¯ä¸ä¸ªåºæ¬çæ°æ®ç»æï¼å¾å¤å°æ¹é½è½çå°âæ âç身影ãæ常è§çåºè¯¥æ¯å¨åç§è½¯ä»¶åç½é¡µçèåæ ä¸ï¼å¤å±çº§çæå å ¶å®å°±æ¯ä»¥ä¸æ£µæ çå½¢å¼è¿è¡å±ç°çï¼å¦ä¸å¾æ示ï¼
å¨æ çå±çº§åæ ç¾ç±»å«æ¯è¾å°ï¼å¹¶ä¸æ ç¾ç±»å«æ¯è¾åºå®çæ¶åï¼ææ¶åæ¯ç´æ¥ç±å端åå¦ç¡¬ç¼ç å®ç°ãå¦ææ³è¦ä¿®æ¹æ个类å«ï¼åéè¦æ¹å¨å端代ç ï¼å¦ææ³è¦å¢å ç±»å«ï¼åéè¦å¤§éæ¹å¨å端代ç ãè¿ç§æ¹å¼æ¾ç¶æ¯ä¸åççï¼å æ¤æ们常常ä¼ä»æ°æ®åºä¸è¯»åæ´ä¸ªèåçæ°æ®ï¼å¹¶å 以å¤çè¿è¡å±ç°ï¼åå®ç°ä¸äºç®åçæ¥å£ï¼å¯¹æ°æ®åºçæ°æ®è¿è¡å¢å æ¹æ¥ï¼å®ç°å¯¹èåä¸ç±»å«æ çå¨ææ§å¶ãæ¬ææ³è¦è®¨è®ºçé®é¢å°±æ¯ï¼ä¸ºäºå®ç°å¨æå è½½ç½é¡µä¸çæ å½¢ç»æï¼æ°æ®åºéçæ°æ®åºè¯¥å¦ä½è®¾è®¡ååå¨ï¼ååºè¯¥å¨è¿åå端ä¹åè¿è¡ææ ·çæ°æ®å¤çå¢ï¼æ¬æå°ä»¥ä¸ä¸ªç®åçå±çº§ç»æ为ä¾ï¼å¯¹è¿ä¸ªé®é¢è¿è¡æ¢è®¨ï¼
âââ root
âââ level-1
âââ level-2
â âââ level-2.1
â âââ level-2.2
â âââ level-2.2.1
â âââ level-2.2.2
âââ level-3
âââ level-3.1
æ°æ®åºåå¨
å¨æ°æ®ç»æä¸ï¼å¦ææ³è¦å¨ä¸æ£µæ ä¸å®ä½æä¸ä¸ªèç¹ï¼æ们éè¦ç¥éå®å¨æç§ç¹å®éåæ¹å¼ï¼å±åºéåãåä¸ååºéåï¼ä¸æ¯ç¬¬å 个èç¹ãå¨æ°æ®åºä¸ï¼æ们éè¦æèçæ¯åå¨ä»ä¹ä¿¡æ¯ï¼è½å¤è®©æ´æ£µç±»å«æ çå¢å æ¹æ¥åå¾å®¹æï¼å æ¤æ们å¯ä»¥ä»å¢å æ¹æ¥æä½ä¸æèéè¦åå¨åªäºä¿¡æ¯ã
å¢å ï¼å¢å ä¸ä¸ªèç¹æ¶ï¼é¦å éè¦ç¥éå½åèç¹åºè¯¥æå¨åªä¸ªç¶èç¹ä¸é¢ï¼å æ¤ç¶èç¹idæ¯å¿ è¦çãåæ¶è¿éæä¸ä¸ªæ³¨æç¹ï¼ç¬¬ä¸å±çº§çèç¹æ¯æ²¡æç¶èç¹çï¼æ以æ们éè¦èæåºä¸ä¸ªå¼ä½ä¸ºæ ¹èç¹ï¼ä¹å°±æ¯ç¬¬ä¸å±çº§ææèç¹çç¶èç¹ã
å é¤ï¼å é¤åªéè¦æ ¹æ®èç¹idå°±å¯ä»¥ç´æ¥è¿è¡å é¤ã
ä¿®æ¹ï¼ä¿®æ¹ä¹åªéè¦æ ¹æ®èç¹idå°±å¯ä»¥è¿è¡æ´æ°ã
æ¥è¯¢ï¼æ¥è¯¢å两é¨åã第ä¸é¨åæ¯æ¥è¯¢æ个èç¹çåèç¹ï¼ä¹å°±æ¯å±å¼æä½ï¼å¯ä»¥ç´æ¥æ¥è¯¢ç¶èç¹id为xxxçèç¹ï¼å æ¤ç¶èç¹idæ¯å¿ è¦çï¼ç¬¬äºé¨åæ¯æ¥è¯¢æ个å±çº§çææèç¹ï¼æ¤æ¶å æç¶èç¹idæ¯ä¸å¤çï¼å æ¤å¿ é¡»å¼å ¥ä¸ä¸ªå±çº§idçå段ã
综ä¸ï¼æ们åªéè¦å¨æ°æ®åºä¸åå¨ç¶ç±»å«çidååç±»å±çº§ï¼å³å¯ä»¥å®æ对æ´æ£µåç±»æ çæææä½ã
è³äºä¸ºä»ä¹æ¯åå¨ç¶ç±»å«idï¼èä¸æ¯åç±»å«idãå¯ä»¥æèä¸ä¸ï¼å 为ç¶ååä¹é´çå ³ç³»å ¶å®æ¯ä¸å¯¹å¤çå ³ç³»ï¼æ以å¦æåå¨åç±»å«idï¼æ¯ä¸ä¸ªèç¹çä¿¡æ¯æ¯éè¦åå¨å¤æ¡è®°å½çï¼å¹¶ä¸æ°æ®åå¨å¤§éåä½ï¼å¦æåå¨çæ¯ç¶ç±»å«idï¼ååç¶ä¹é´çå ³ç³»æ¯å¤å¯¹ä¸ï¼å æ¤æ¯ä¸èç¹åªéè¦åå¨ä¸æ¡è®°å½ï¼å³å¯è¡¨å¾ç¶åå ³ç³»ï¼ä¸æ´ä¸ªæ°æ®åºä¸åå¨æ°æ®åä½ã
ç»è¿ä¸éåæï¼æç»æ们å®ä¹åºå¦ä¸æ°æ®åºï¼
å ¶ä¸parent_id代表ç¶ç±»å«çidï¼ç¬¬ä¸å±çº§çç¶ç±»å«id为0ï¼category_levelæ¯ä»£è¡¨å½åç±»å«æå¨å±çº§ï¼ä»1å¼å§è®¡æ°ã
建表è¯å¥å¦ä¸ï¼
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for category_info
-- ----------------------------
DROP TABLE IF EXISTS `category_info`;
CREATE TABLE `category_info` (
`id` int NOT NULL AUTO_INCREMENT,
`category_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'åç±»å称',
`parent_id` int NOT NULL DEFAULT '0' COMMENT 'å½ååç±»ç¶ç±»çidï¼å¦ææ ç¶ç±»å为0',
`category_level` int NOT NULL COMMENT 'åç±»å±çº§',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 COMMENT='å类信æ¯è¡¨';
-- ----------------------------
-- Records of category_info
-- ----------------------------
BEGIN;
INSERT INTO `category_info` VALUES (1, 'level-1', 0, 1);
INSERT INTO `category_info` VALUES (2, 'level-2', 0, 1);
INSERT INTO `category_info` VALUES (3, 'level-3', 0, 1);
INSERT INTO `category_info` VALUES (4, 'level-2.1', 2, 2);
INSERT INTO `category_info` VALUES (5, 'level-2.2', 2, 2);
INSERT INTO `category_info` VALUES (6, 'level-3.1', 3, 2);
INSERT INTO `category_info` VALUES (7, 'level-2.2.1', 5, 3);
INSERT INTO `category_info` VALUES (8, 'level-2.2.2', 5, 3);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
æ å½¢ç»æçæ
æ°æ®åºçæ°æ®æäºï¼é£ä¹æ们该æä¹è¿åä»ä¹æ ·çæ°æ®ç»å端è¿è¡æ¸²æå¢ï¼ä¼æå¨ç¥ï¼jsonæ¯ä¸ç§å¸¸è§çï¼ç¨äºåå端交äºçæ°æ®æ ¼å¼ï¼å æ¤æ们å¯ä»¥æé åºä¸æ£µjsonæ ï¼äº¤ç±å端åå¦è¿è¡æ°æ®ç»å®ã代ç å¦ä¸ï¼
# -*- coding: utf-8 -*-
import json
# categories_listä»dbè·åï¼æ¤å¤æ¯ä¸ºäºæ¹ä¾¿å±ç¤º
category_list = [{'id': 1, 'category_name': 'level-1', 'parent_id': 0, 'category_level': 1},
{'id': 2, 'category_name': 'level-2', 'parent_id': 0, 'category_level': 1},
{'id': 3, 'category_name': 'level-3', 'parent_id': 0, 'category_level': 1},
{'id': 4, 'category_name': 'level-2.1', 'parent_id': 2, 'category_level': 2},
{'id': 5, 'category_name': 'level-2.2', 'parent_id': 2, 'category_level': 2},
{'id': 6, 'category_name': 'level-3.1', 'parent_id': 3, 'category_level': 2},
{'id': 7, 'category_name': 'level-2.2.1', 'parent_id': 5, 'category_level': 3},
{'id': 8, 'category_name': 'level-2.2.2', 'parent_id': 6, 'category_level': 3}]
def get_categories_tree():
# ä»db读åcategoryæ°æ®
# categories_list = db.get_all_categories()
# æ建map: category_id -> category对象
categories_map = {}
for category in category_list:
category["sub_categories"] = []
categories_map[category["id"]] = category
# å°ç¶åç±»å«è¿æ¥å½¢ææ ç»æ
categories_tree = []
for category in category_list:
# 第ä¸å±çº§ç±»å«ç´æ¥å å
¥æ°ç»
if category["parent_id"] == 0 and category["category_level"] == 1:
categories_tree.append(category)
# å¦ææ¯å
¶å®å±çº§çç±»å«ï¼åå°å½åç±»å«æ·»å å°ç¶ç±»å«ä¸çsub_categoriesä¸
else:
categories_map[category["parent_id"]]["sub_categories"].append(category)
return categories_tree
if __name__ == '__main__':
category_tree = get_categories_tree()
print(json.dumps(category_tree))
æé æ çæ´ä½ææ³æ¯ï¼å 建ç«å¥½id->对象çæ å°å ³ç³»ï¼å¹¶å¢å ç¨äºåå¨åç±»å«å¯¹è±¡çæ°ç»ï¼ç¶åéåæ°æ®ï¼å°å½åèç¹æ·»å å°ç¶ç±»å«çåç±»å«æ°ç»ä¸ãå ¶å®å°±æ¯æ们å¨æ°æ®åºåå¨é¶æ®µè®¨è®ºå°çï¼ä¸ºä½ä¸åå¨åç±»å«idèæ¯ç¶ç±»å«idãä»åå¨è§åº¦èè¨ï¼åå¨ç¶ç±»å«idæ¯æ´ä¼çæ¹æ¡ï¼ä½æ¯ä»å¯è§åè§åº¦èè¨ï¼ç»æ¯ä¸ªç±»å«å ä¸åç±»å«æ°ç»æ´å®¹æ渲æãå æ¤æ们éè¿ä»¥ä¸è½¬åï¼è¾¾æäºåå¨åå¯è§å两è çä¼çç®æ ã
æåæ们æ¥çä¸ä¸è¾åºçjsonæ æ¯é¿ä»ä¹æ ·çï¼
符åé¢æï¼ä»»å¡å®æ~