技术博客
行政区划查询拼音字段能干嘛?pinYin / simplePy / prePinYin 在搜索排序中的应用

行政区划查询拼音字段能干嘛?pinYin / simplePy / prePinYin 在搜索排序中的应用

作者: 万维易源
2026-08-31
行政区划查询拼音搜索排序
# 行政区划查询拼音字段能干嘛?pinYin / simplePy / prePinYin 在搜索排序中的应用 > 接口 / 接入点:行政区划查询(apiCode 1149)· 区域查询 1149-1 / 子区域查询 1149-2 · 免费服务 > 请求方式:POST / GET · 返回格式:JSON · 适用人群:前端 / 搜索功能开发者 · 阅读时间:约 6 分钟 ## 核心要点 - 返回里带了三套拼音字段:`pinYin`(全拼)、`simplePy`(简拼)、`prePinYin`(首字母)。 - 它们让你无需额外拼音库,就能做「拼音 / 首字母检索」和「按拼音排序」。 - 字段为空时(如部分下级区域)需兜底,不要硬依赖。 ## Why:拼音字段能省一个依赖 做地区选择 / 通讯录式 UI 时,用户常想输入「km」或「kunming」直接定位「昆明」。如果自己接拼音转换库,要处理多音字、生僻字,还占体积。行政区划查询直接把拼音随结果返回,拿来即用。 ## What:三个拼音字段的区别 | 字段 | 含义 | 示例(昆明) | |------|------|------| | pinYin | 全拼(空格分隔) | kun ming shi | | simplePy | 简拼(连写) | KM | | prePinYin | 拼音首字母 | K | > 子区域查询返回示例里 `pinYin` 为 `Liwan`、`simplePy` 为 `Lw`、`prePinYin` 为 `L`,可见字段命名一致。 ## How:拼音检索 + 排序 ### Python(按首字母检索 + 按全拼排序) ```python import requests def search_by_pinyin(keyword): r = requests.get("https://route.showapi.com/1149-1", params={"appKey": "YOUR_APPKEY", "areaName": keyword, "level": "2"}, timeout=10) data = r.json()["showapi_res_body"]["data"] # 首字母匹配 hit = [d for d in data if d.get("prePinYin", "").upper() == keyword.upper()] # 按全拼排序 hit.sort(key=lambda d: d.get("pinYin", "")) return hit for item in search_by_pinyin("K"): print(item["areaName"], item["pinYin"], item["simplePy"], item["prePinYin"]) ``` ### 前端(首字母分组列表) ```javascript fetch(`https://route.showapi.com/1149-1?appKey=YOUR_APPKEY&areaName=云南&level=2`) .then(r => r.json()) .then(d => d.showapi_res_body.data) .then(list => { const groups = {}; list.forEach(o => { const k = (o.prePinYin || "#").toUpperCase(); (groups[k] = groups[k] || []).push(o.areaName); }); console.log(groups); // { K: ["昆明市","曲靖市"], ... } }); ``` ### cURL ```bash curl -X POST "https://route.showapi.com/1149-1?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" \ -d "level=2&areaName=%E4%BA%91%E5%8D%97&page=1" ``` ## 返回示例 ```json { "showapi_res_body": { "ret_code": 0, "data": [ {"areaName": "昆明市", "pinYin": "kun ming shi", "simplePy": "KM", "prePinYin": "K"}, {"areaName": "曲靖市", "pinYin": "qu jing shi", "simplePy": "QJ", "prePinYin": "Q"} ] } } ``` ## 进阶 / 边界 - 拼音字段可能为空(尤其部分下级区域),检索 / 排序前要做空值兜底,避免 KeyError。 - `simplePy` 是连写简拼(如 `KM`),适合首字母快捷输入;`pinYin` 全拼适合模糊匹配。 - 多音字以官方数据为准,接口已处理好,无需你再判断。 ## FAQ **Q:三个拼音字段必须都存吗?** 按需求选:做首字母检索用 `prePinYin`,做全拼模糊用 `pinYin`,做简拼快捷用 `simplePy`。 **Q:拼音字段为空怎么办?** 部分下级区域可能为空,检索 / 排序时给个默认值(如 `#`)兜底,不要直接抛错。 **Q:prePinYin 是大写还是小写?** 返回示例为大写(如 `K`),比较时建议统一 `.upper()` 再比,避免大小写漏匹配。 **Q:能靠拼音反查 areaName 吗?** 可以拿拼音做匹配后取 `areaName`,但拼音可能重名,最终展示仍以 `areaName` / `wholeName` 为准。 ## 相关能力 / 下一步阅读 - [行政区划查询返回字段全解:wholeName / 各级编码 / 拼音一文读懂](https://www.showapi.com/guides/region-query-response-fields-1149) - [行政区划查询实战:省市区三级联动选择器前端实现](https://www.showapi.com/guides/region-query-cascade-1149) - **本系列共 11 篇**:查看[行政区划查询指南总目录](https://www.showapi.com/guides/region-query-guides-1149)