火山引擎api要求json中换行符必须转义为“ ”,即字符串内写成“\n”;手动拼接json易出错,应使用json.stringify(js)、jackson(java)、json.dumps(python)或encoding/json(go)等标准序列化方法自动处理;若需保留原始换行,可改用multipart/form-data提交,将多行字段作为text/plain part单独上传。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

火山引擎API接收多行文本字段时,若JSON字符串中含换行符( ),后端默认会将其视为非法字符导致400错误——这不是你内容写错了,而是JSON规范本身禁止未转义的原始换行。
确认换行符是否已正确转义
打开你构造的JSON payload,检查所有字符串字段内的换行是否已替换为 \n。例如:"description": "第一行
第二行" 必须写成 "description": "第一行\n第二行"。
原始换行(回车键直接敲出来的空行)在JSON中不被允许,必须显式转义。否则火山引擎的严格RFC 8259解析器会在第一层就拒绝请求,连鉴权都不会触发。
使用JSON.stringify自动处理换行
前端JavaScript场景下,不要手动拼接带 的字符串。直接定义对象再序列化:
const data = { note: `采购说明:
1. 需含发票
2. 72小时内发货` };
const payload = JSON.stringify(data); // 自动把
转为\n
这一步不可跳过——哪怕你肉眼看着“格式很整齐”,只要没走JSON.stringify,就大概率含非法换行。
后端生成JSON时的三种处理方式
方法一:Java中用Jackson ObjectMapper
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(map); // 自动转义所有控制字符
方法二:Python中用json.dumps
import json
payload = json.dumps(data, ensure_ascii=False)
方法三:Go语言用encoding/json
b, _ := json.Marshal(data) // 原生支持
→\n转换
这三种标准库均默认将字符串内换行符转义为\n,无需额外配置。手写JSON字符串是唯一高危路径。
绕过JSON解析的替代方案
如果业务强依赖原始换行且无法修改字段结构,改用 multipart/form-data 提交:
把多行文本字段单独作为form的一个part,Content-Type设为 text/plain;
其他参数仍可放在JSON字段中,但该多行字段必须剥离出来——火山引擎明确要求 multipart 中的 JSON 字段值本身必须是字符串类型,而 text/plain part 可原样保留换行。
注意:此时整个请求体不再是纯JSON,Content-Type头必须改为 multipart/form-data; boundary=xxx,且不能带 application/json。











