报 400 Invalid JSON in request body: Unterminated string(请求体过大)怎么解决
API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"Invalid JSON in request body: Unterminated string in JSON at position 10407567 (line 1 column 10407568)"}}报错里 position 后面是一个上千万的数字,说明请求体太大、在传输途中被截断了。CCSub 单个请求体上限是 50MB(超过返回 413);2026-10-15 之前经 https://www.ccsub.net 的接口在约 10MB 处会截断,现已修复。用 /compact、少贴截图、拆小文件即可;position 很小则是 JSON 本身写错了。
3 步解决
- 1
看 position 后面的数字
上千万(例如 10407567、8553900)说明请求体太大、在传输过程中被截断,JSON 不完整;只有几十几百,说明发出的 JSON 本身就写错了,多见于手写的 curl 命令或脚本。
- 2
在 Claude Code 里压缩对话
先用 /context 看看是什么占了上下文,再用 /compact 压缩历史,或者用 /clear 开新对话。截图和图片会以 base64 形式留在历史里,每一轮都会重新发送,尽量压缩后再贴、不要反复贴。
- 3
从源头把单个请求变小
超大的日志、压缩过的 JS、数据文件不要整个读进对话,先让 AI 用 grep、head 之类的命令取需要的部分;自己写代码调用时,图片先缩小分辨率再编码,长对话截断早期历史。
同一个问题的其他写法
{"type":"error","error":{"type":"request_too_large","message":"Request body exceeds 50MB limit (got 52.4MB)"}}Request body is too large. Please reduce your message size, remove large images, or shorten the conversation history. | 请求体过大,请缩短对话历史、减小图片大小或减少附件。Invalid JSON in request body: Expected property name or '}' in JSON at position 1 (line 1 column 2)
为什么请求体大了会报「Invalid JSON」
这个报错的字面意思是「JSON 里有一个字符串没有结束」,看起来像是客户端发了坏数据,但 position 后面那个上千万的数字才是关键。
CCSub 单个请求体的上限是 50MB,超过时直接返回 413,message 是 Request body exceeds 50MB limit。上限以内的请求,JSON 本应完整到达;如果收到的是一段在中间断掉的 JSON,解析到末尾时发现字符串没有闭合,就会返回这个 400。
2026-10-15 之前,经 https://www.ccsub.net 访问的接口(包括 Claude Code 默认请求的 /v1/messages)要先经过网站的路由层,这一层只缓存约 10MB(10,485,760 字节)的请求体,超出部分被丢掉,所以 position 常落在 850 万到 1040 万之间(中文多时一个汉字占 3 个字节,位置会小一些)。这个问题已经修复,现在大于 10MB、小于 50MB 的请求能完整处理。
如果修复之后你仍看到 position 很大的这个 400,多半是请求在你本地或网络上传到一半被打断了:本地代理软件对请求体大小有限制、网络不稳导致上传中断、或者客户端自己截断了。先关掉代理直连试一次,再按下面的方法把请求变小。另外,如果上游线路认为请求过大,CCSub 会先换一条线路重试,都不行时返回 413 request_too_large,文案是「请求体过大,请缩短对话历史、减小图片大小或减少附件」。
请求体为什么会这么大
- 截图和图片:图片在请求里是 base64 编码,体积比原文件大三分之一左右。一张手机截图常常有一两兆,贴上几张、再聊几十轮,每一轮都要把这些图片重新发一遍。
- 读了大文件:让 Claude Code 读取完整的日志文件、压缩过的前端产物、数据库导出、锁文件,内容会整个进入上下文。
- 长时间不清理的会话:Claude Code 会自动压缩上下文,但如果单个文件或单张图片就很大,自动压缩也压不下来。
具体怎么处理
- 在 Claude Code 里输入
/context,看是哪部分占用最多。 - 输入
/compact压缩当前对话,保留要点继续工作;话题已经换了的话,直接/clear。 - 截图先裁剪、压缩再贴,同一张图不要反复贴。需要 AI 看日志时,让它用
grep、tail取相关的几十行,而不是读整个文件。 - 自己写代码调用时:图片先缩到合适的分辨率再编码;多轮对话只保留最近的若干轮;需要处理大文档时分段发送。
position 很小的情况
如果报错是 Expected property name or '}' in JSON at position 1、Unexpected non-whitespace character after JSON at position 10 这类,数字只有个位数到几百,说明发出去的 JSON 从一开始就不合法,与大小无关。最常见的是在 Windows 的 cmd 或 PowerShell 里直接把 JSON 写在 -d '...' 里,引号被 shell 改掉了。把请求体存成文件,用 curl ... -d @body.json 发送最稳妥。用 SDK 调用时一般不会遇到,出现了就检查是不是自己手动拼接了 JSON 字符串。
常见问题
单个请求最大可以多大?
单个请求体上限是 50MB,Anthropic 接口(Claude Code 默认)和 OpenAI 兼容接口相同,超过返回 413 request_too_large。2026-10-15 之前,经 https://www.ccsub.net 访问 Anthropic 接口时请求体在约 10MB 处会被截断、返回这个 400,这个问题已经修复。
为什么对话越长越容易出现?
Claude Code 每一轮都会把完整的对话历史、读过的文件内容和贴过的图片一起重新发送。一张手机截图编码成 base64 后有一两兆,聊得越久请求体越大,直到某一轮超过上限。/compact 会把历史压缩成摘要,体积马上降下来。
position 很小的 Invalid JSON 是什么原因?
请求体本身不是合法的 JSON,常见于在 Windows 命令行里用单引号包 JSON、手动拼字符串时漏了逗号或引号、发送了空 body。把请求体放进文件用 curl 的 -d @body.json 发送,可以避开命令行的转义问题。
这类 400 会扣费吗?
不会。JSON 解析失败发生在转发之前,不产生费用。
还是不行?
- 按症状查《故障排查》文档
- 联系客服:发邮件到 support@ccsub.net,附上工具名和版本、系统、完整报错文本和注册邮箱(不要发 API Key)。
- 对照接入教程重新检查配置:Claude Code 接入教程、Codex CLI 接入教程
相关报错
There's an issue with the selected model (claude-opus-6). It may not exist or you may not have access to it. Run /model to pick a different model.model 标识写错了,按 /api/v1/models 列表里的 id 改(用短横线);如果所有型号都 404、返回的是一整页 HTML,就是 Base URL 写错了。API Error: 504 {"type":"error","error":{"type":"timeout_error","message":"Upstream timed out"}}等上游的时间超过上限了。自己调用时改成流式(stream: true),上下文太长就 /compact,长输出拆成几次;偶发一次直接重试即可,不计费。API Error: 503 {"type":"error","error":{"type":"overloaded_error","message":"上游线路暂时不可用,请稍后重试(不是您账户余额的问题) | Upstream temporarily unavailable, please retry shortly (this is not about your account balance)."}}CCSub 已自动换线重试过,这次仍没有可用线路。等一两分钟在原会话里发「继续」,或用 /model 换个型号;不扣费,也不是你的余额问题。
还没有 CCSub 账号?
注册后在控制台创建 API Key,填进 Claude Code、Codex 等工具即可使用,按实际用量计费。