省市区三级联动查询redis(通过python脚本导入数据)

最近工作有一个工作需求是实现省市区联动,点击省下拉框,选中一个省,然后再选市,最后选区,当然最重要的首先自然是数据了,没数据怎么测试接口,我数据是在 https://hxkj.vip/demo/echartsMap/ 这里拿的,得到一个json文件,里面是一个list的结构,每一条数据都是省市区树级展示。

那么有数据之后,就要导入库中,之所以选用redis而不是mysql,是因为省市区数据是比较固定的,很难会有改动,所以放在redis反而更好

python脚本将json数据导入redis
复制代码
import redis
import json
r = redis.Redis(host='127.0.0.1', port=6379, db=4)
with open("C:\\Users\\10926\Desktop\\pca-code.json", 'r',encoding='utf-8-sig') as file:
    data = json.load(file)
for item in data:
 r.lpush('regionData', json.dumps(item))

只需要改个文件路径名即可

省市区联动下拉框展示

此时redis中的数据是这种格式,通过code来实现父子关联:

那么我们就可以通过code来实现省市区联动:

java 复制代码
	/**
	 *	没传code就是省,有就是市区
     * 分别查询省市区
     * @param regions
     * @param code
     * @return
     */
    public List<RegionVO> getRegionsByCode(List<RegionVO> regions, String code, RegionFlag flag) {
        List<RegionVO> result = new ArrayList<>();
        for (RegionVO region : regions) {
            // 不传code时查询所有省
            if (code == null) {
                result.add(new RegionVO(region.getCode(), region.getName(), null));
            } else if (region.getCode().equals(code)) {
                // 传入省或市的code时
                if (region.getChildren() != null) {
                    for (RegionVO child : region.getChildren()) {
                        result.add(new RegionVO(child.getCode(), child.getName(), null));
                    }
                    flag.setValue(true);
                }
            }
            // 递归查询子区域
            else if (region.getChildren() != null) {
                result.addAll(getRegionsByCode(region.getChildren(), code, flag));
            }
            // 当查到指定数据后,退出循环
            if(flag.getValue()) {
                break;
            }
        }
        return result;
    }

这样,我们就实现了,省市区三级联动,点击省,会展示出所有的省份,选中一个省,就会展示所有的市,选中一个市,就会展示所有的区。

相关推荐
Lyn_Li4 小时前
扫描 PDF 歪了怎么办?用 6 种检测方法做本地批量扶正(附开源工具)
python·pdf·ocr·tesseract·开源工具·文档处理·本地处理·扫描件纠偏
白帽小丑5 小时前
# 一次 MySQL DELETE 误操作的数据恢复尝试实录
数据库·mysql
金銀銅鐵5 小时前
费马小定理
python·数学·算法
Quincy_Freak7 小时前
信创内网数据规范实践:银河麒麟下SQLite本地数据安全管理方案
数据库·sqlite·arm·数据库管理·大数据分析·银河麒麟·aarch64
疋瓞9 小时前
python和C++对比(1)_数据类型和数据结构
数据结构·c++·python
2601_962683899 小时前
治理遗留系统中的“生肉 SQL”:一次用多模型协作优化慢查询的实战复盘
数据库·人工智能·sql
酱学编程9 小时前
【从零到一实现一个 AI Agent 框架 · 第四篇】04. 任务规划:拆解复杂目标 -
服务器·网络·数据库·人工智能
如此这般英俊10 小时前
手搓Claude Code-第六章 subagent
数据结构·人工智能·python·语言模型·自然语言处理
shushangyun_11 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
元Y亨H11 小时前
Python - FastAPI 全方位介绍
python·fastapi