返回形态速查
同样是 data,形态有四种:行数组、表列表、已排版文本、多段结构。取数前先判类型,否则会在"该按 data[0] 取"的地方去读字段,或者反过来。
四种形态
data 不是一种东西。先看它是什么类型,再决定怎么取:
| 形态 | data 的类型 |
怎么取 |
|---|---|---|
| 行数组 | 数组,每项是一行 | data[0].字段;多行就是 data[0] → data[n] |
| 表列表 | 数组的数组,每项是一张表 | data[0] 是第一张表,data[0][0] 是表里的第一行 |
| 已排版文本 | 字符串(markdown) | 直接显示用 data;程序化取数用多出来的 structured / tables |
| 多段结构 | 对象,含 tables |
从 data.tables 按段取,每段有 title / slug / rows |
一句话记法:看第一个字符是 [、{ 还是 "。
33 个端点分别属于哪一种
| 形态 | 端点 |
|---|---|
| 行数组 | quote · kline · minute · hot · technical · chip · profile · search · ipo · dividend · block-trade · margin-trade · orderbook · snapshot |
| 表列表 | finance |
| 已排版文本 | market-overview · changedist · events · lhb · sector · sector-valuation · macro · bond · etf · dehydrated · screen |
| 多段结构 | shareholder · calendar |
| 对象(既不是数组也不是文本) | fund · industry-chain |
| 特例 | health(无 data)· usage(纯文本,不是 JSON)· challenge(返回挑战本身) |
几个容易搞混的
orderbook 和 snapshot 也是行数组,只是恒定 1 行。设计上统一成“行数组”是为了让客户端不必为单对象端点写特判 —— 你照 data[0].字段 取就对了。
⚠️ 上表是单只代码时的形态。传多个代码时形态会变 —— quote / technical / profile 多出一列代码,chip 会变成前缀列名的宽表(行数不翻倍)。细节见批量取数。
finance 是表列表,不是多段结构。data[0] / data[1] / data[2] 依次是利润表 / 资产负债表 / 现金流量表,顺序固定。想按名字取,见下节。
shareholder 和 calendar 是多段结构,data.tables 是保序的表列表。⚠️ shareholder 的段不能按序号取 —— A 股和港股的段数都是 3,但语义完全不同(A 股是十大股东 / 十大流通股东 / 股东户数;港股是持股股东 / 股东分布 / 机构持仓)。要按 slug 取。
fund 是真正对象(不是文本):data.main_net、data.main_rank 这类键直接取。
文本型端点怎么程序化取数
文本型端点的 data 是给人看的 markdown,但同时多出两个字段:
| 字段 | 是什么 |
|---|---|
structured |
第一张表,[{列名: 值}] |
tables |
全部表,[[{列名: 值}], ...] |
data 本身没有被改动 —— 文本客户端继续用 data,程序客户端用 structured / tables。多段输出(如 calendar、macro)用 tables 才拿得全。
structured 只给第一张表,所以只要一张表时用它最省事(如 screen 的筛选结果);有多段时一定要用 tables。
常见误用
- 把文本型当数组取 ——
market-overview、sector这类data是字符串,data[0]拿到的是第一个字符,不是第一行。 - 把行数组当对象取 ——
quote的data是数组,直接读data.last取不到,要data[0].last。 finance按名字取 —— 它是顺序固定的表列表,没有 slug;按名字取会拿错表。shareholder按序号取段 —— A 股 / 港股段数相同但语义不同,必须按slug。- 忘了
structured只含第一张表 —— 多段端点只读它会丢掉后面所有段。
最后更新: 2026-10-07
形态为 2026-10-07 逐个端点实测(数据层直调,逐端点打印返回类型与键名);文本型端点额外多出的 structured / tables 取自服务端注入逻辑。