取消勾选一两个列,看总行数塌下去——被合并的行不会报错,而 total-count 会跟着报出去重后的数字。本页把「你请求的投影」与「补上行标识的同一次投影」并排计数,差值就是被静默合并的行。
路径里的版本号属于数据集本身:两个是 v2,汇率那个只有 v1,没有别名。
取消勾选 src_line_nbr 之类的列,再看下方两个计数分开。空选表示不带 fields,即请求整行。
打开后加上 filter=<列>:eq:null。查询语言能匹配到它,说明 "null" 是一个值而不是缺失 —— 也说明它逃不过任何按值筛选的逻辑。
不带 fields
19,151
整行,数据集真实行数
fields=2 列
14,700
你会拿到的数字 —— 且没有任何提示
+ record_date + src_line_nbr
19,151
客户端为每次投影自动补上,于是塌缩无法发生
行不是被截断而是被合并:区分列一去掉,原本不同的行就完全相同了。 在 ratesOfExchange 上,这次投影里每 1.3 行只剩 1 行,任何在它上面算的平均、求和、计数都会偏这么多。
浏览器 → FiscalData(无代理,CORS 为 *) // 对照三次计数 GET https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/od/rates_of_exchange?page%5Bsize%5D=1 GET https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/od/rates_of_exchange?fields=record_date%2Cexchange_rate&page%5Bsize%5D=1 GET https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/od/rates_of_exchange?fields=record_date%2Csrc_line_nbr%2Cexchange_rate&page%5Bsize%5D=1 // 行数据 GET https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/od/rates_of_exchange?fields=record_date%2Cexchange_rate&sort=-record_date&page%5Bsize%5D=12 (无鉴权头 —— FiscalData 无需 key) 注:page[size] 上限 10000,超出是 400 而不是截断,客户端已钳制。
| record_date | country(未请求) | currency(未请求) | country_currency_desc(未请求) | exchange_rate | effective_date(未请求) | src_line_nbr(未请求) | record_fiscal_year(未请求) | record_fiscal_quarter(未请求) | record_calendar_year(未请求) | record_calendar_quarter(未请求) | record_calendar_month(未请求) | record_calendar_day(未请求) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-09-30 | — | — | — | 65.15 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 80.75 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 133.126 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 913.0 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 1545.0 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 360.0 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 1.435 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 1.7 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 0.377 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 124.0 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 2.02 | — | — | — | — | — | — | — | — |
| 2026-09-30 | — | — | — | 3.029 | — | — | — | — | — | — | — | — |
线上每个值都是字符串,日期与整数也一样。缺失值是四字符字符串 "null",不是 JSON null —— 直接 Number() 会静默得到 NaN,所以 schema 在边界上把它解析成 null。而灰掉的列是 fields 没要的,它们在响应里是 「键不存在」,又是另一种形态。