技术博客
字典查询:返回字段全解,ret_code 与 showapi_res_body 一文读懂

字典查询:返回字段全解,ret_code 与 showapi_res_body 一文读懂

作者: 万维易源
2026-09-02
字典查询返回字段ret_codeJSON结构
# 字典查询:返回字段全解,ret_code 与 showapi_res_body 一文读懂 > 元信息:接口 **字典查询**(apiCode 1524)· 免费服务 · 返回 JSON · 适用:所有调用方(尤其首次接入与排障)· 阅读时间约 6 分钟 ## 核心要点 - 返回分两层:系统级(`showapi_res_code` 等)与业务级(`showapi_res_body` 内),业务结果看 `ret_code` 是否为 "0"。 - 6 个接入点返回结构分两类:**列表类(1524-1/2/3/4)走 `datas` 数组**;**详情类(1524-5/6)是扁平对象**,数据直接挂在 `showapi_res_body` 下。 - `basic_explain` / `detail_explain` 文档标 String 但示例返回数组,解析时必须兼容两种类型。 ## Why:为什么要把返回结构讲清楚 很多接入报错不是接口问题,而是没搞懂「系统字段 vs 业务字段」「数组 vs 扁平对象」。比如有人拿 1524-5 当 `datas[0]` 取数据,结果取不到——因为汉字详情是扁平对象。本文一次说清,省去反复试错。 ## What:前置条件与接口速览 | 项 | 值 | |----|----| | 接口名称 | 字典查询 | | apiCode | 1524 | | 接入点 | 1524-1 拼音列表 / 1524-2 部首列表 / 1524-3 拼音查字 / 1524-4 部首查字 / 1524-5 汉字详情 / 1524-6 词语成语解释 | | 返回格式 | JSON | | 业务包装 | 所有业务数据在 `showapi_res_body` 内 | | 鉴权 | URL 上的 `appKey` | 接口详情页:[https://www.showapi.com/apiGateway/view/1524](https://www.showapi.com/apiGateway/view/1524) ## How:如何解析返回 ### 步骤 1:先判断系统级成功 ```python import requests APP_KEY = "YOUR_APPKEY" resp = requests.post( f"https://route.showapi.com/1524-5?appKey={APP_KEY}", data={"hanzi": "你"}, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10, ) body = resp.json() # 系统级:HTTP 成功不代表业务成功 if body.get("showapi_res_code") != 0: raise RuntimeError(f"网关错误:{body.get('showapi_res_error')}") res_body = body["showapi_res_body"] ``` ### 步骤 2:再判断业务级成功 ```python if res_body.get("ret_code") != "0": raise RuntimeError(f"业务失败:{res_body.get('remark')}") ``` ### 步骤 3:按接入点类型取数 ```python # 列表类(1524-1/2/3/4):数据在 datas 数组 # 例如 1524-3 拼音查字 for item in res_body.get("datas", []): print(item.get("hanzi"), item.get("pinyin"), item.get("bihua")) # 详情类(1524-5/6):字段直接挂在 res_body # 1524-5 汉字详情 print(res_body.get("hanzi"), res_body.get("pinyin"), res_body.get("wubi")) # 1524-6 词语/成语解释 print(res_body.get("cidian_explain"), res_body.get("allusion_explain")) ``` ### cURL 与 Node.js ```bash curl -X POST "https://route.showapi.com/1524-1?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" ``` ```javascript const resp = await fetch(`https://route.showapi.com/1524-1?appKey=YOUR_APPKEY`, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, }); const body = await resp.json(); const resBody = body.showapi_res_body; if (resBody.ret_code === "0") console.log(resBody.datas); ``` ## 返回示例与字段解析 **公共结构(所有接入点)** ```json { "showapi_res_code": 0, "showapi_res_error": "", "showapi_res_id": "ce135f6739294c63be0c021b76b6fbff", "showapi_res_body": { "ret_code": "0", "remark": "查询成功!", "...": "..." } } ``` **列表类:1524-1 拼音列表(datas 数组)** ```json { "showapi_res_body": { "ret_code":"0", "remark":"查询成功!", "datas": [ {"py_initial":"A","pinyin":"a"}, {"py_initial":"Z","pinyin":"zuo"} ] } } ``` **列表类:1524-3 拼音查字(datas 数组,含 py_tone)** ```json { "showapi_res_body": { "ret_code":"0", "datas": [ {"hanzi":"吖","bihua":"6","py_tone":"ā","pinyin":"a"} ] } } ``` **详情类:1524-5 汉字详情(扁平对象)** ```json { "showapi_res_body": { "ret_code":"0", "hanzi":"你", "pinyin":"nǐ", "bushou":"亻", "bihua":"7", "wubi":"wqiy", "words":"你娘 你老 你好", "basic_explain":["你nǐ","ㄋㄧˇ","称对方……"], "detail_explain":["你","妳","nǐ","【代】","……"] } } ``` **详情类:1524-6 词语/成语解释(扁平对象,allusion_explain 可能为空)** ```json { "showapi_res_body": { "ret_code":"0", "ciyu":"针砭时弊", "cidian_explain":"……指出时代和社会问题……", "allusion_explain":"", "pinyin":"zhēn biān shí bì" } } ``` | 接入点 | 结构 | 关键字段 | |------|------|---------| | 1524-1 拼音列表 | `datas[]` | `py_initial`, `pinyin` | | 1524-2 部首列表 | `datas[]` | `bushou`, `bihua`(如「笔画一」) | | 1524-3 拼音查字 | `datas[]` | `hanzi`, `bihua`, `py_tone`, `pinyin` | | 1524-4 部首查字 | `datas[]` | `hanzi`, `bushou`, `bihua`, `pinyin` | | 1524-5 汉字详情 | 扁平对象 | `hanzi`, `pinyin`, `bushou`, `bihua`, `wubi`, `words`, `basic_explain`, `detail_explain` | | 1524-6 词语成语解释 | 扁平对象 | `ciyu`, `cidian_explain`, `allusion_explain`, `pinyin` | ## 进阶 / 边界 - **两类结构别混**:详情类(1524-5/6)没有 `datas`,直接取 `res_body` 的字段;列表类(1524-1/2/3/4)数据在 `datas` 数组。 - **`py_tone` 可能为空/「未分类」**:1524-3 中部分字 `py_tone` 为「未分类」,前端展示需容错。 - **`allusion_explain` 可能为空串**:1524-6 对普通词语常返回空,展示时回退到 `cidian_explain`。 - **错误码未枚举**:文档仅说明 `ret_code` "0" 成功、其他失败,未给出具体非 0 枚举值,排障以 `remark` 为准。 ## FAQ **Q1:showapi_res_code 和 ret_code 有什么区别?** `showapi_res_code` 是系统/网关层(0 通常表示网关正常);`showapi_res_body.ret_code` 是业务结果,"0" 才是业务成功。判断业务是否拿到数据用 `ret_code == "0"`。 **Q2:为什么我取 datas[0] 取不到汉字详情?** 汉字详情(1524-5)与词语解释(1524-6)是**扁平对象**,字段直接挂在 `showapi_res_body` 下,没有 `datas`。只有 1524-1/2/3/4 才用 `datas` 数组。 **Q3:basic_explain / detail_explain 有时候是数组有时候是字符串?** 是的,文档标注为 String,但返回示例是数组。解析时统一兼容:`v if 不是 list else "\n".join(v)`,避免直接调用字符串方法报错。 **Q4:ret_code 非 0 时有哪些可能值?** 文档未枚举具体非 0 错误码。非 0 即表示失败,读取 `remark` 字段获取原因(多为 AppKey 无效或必填参数缺失)。 ## 相关能力 / 下一步阅读 - [字典查询:5 分钟接入,从注册到查出第一个汉字详情](https://www.showapi.com/guides/dict-quickstart-1524) - [字典查询:汉字详细信息(1524-5)接入](https://www.showapi.com/guides/dict-char-detail-1524) - [字典查询:拼音查字与部首查字(1524-3/1524-4)两种检索路径怎么选](https://www.showapi.com/guides/dict-pinyin-radical-query-1524) - **本系列共 12 篇**:查看[字典查询指南总目录](https://www.showapi.com/guides/dict-guides-1524)