Postman的form-data不支持嵌套字段,必须用raw+JSON方式发送;若需混合文件上传,则通过命名约定(如user.name)展平键名并由后端解析。

Postman里用form-data传嵌套字段,根本行不通
Postman的form-data模式不支持原生嵌套结构。它底层把每个键值对当作独立表单字段处理,遇到user[name]或address[city]这类写法时,后端收到的只是字符串键名,而非解析后的嵌套对象——除非后端框架(如Laravel、Django)主动做了特殊解析,否则request.form.get("user[name]")会返回None或报错。
常见翻车现象:
- 前端发
user[name]=Alice&user[age]=25,后端request.form.to_dict()得到{"user[name]": "Alice", "user[age]": "25"},不是{"user": {"name": "Alice", "age": 25}} - Flask中
request.form.get("user")返回None,因为压根没有叫user的键 - Spring Boot用
@RequestParam Map接收,拿到的仍是扁平键名
真正能传嵌套结构的只有raw + JSON
要让后端拿到嵌套字典或对象,必须走application/json路径。这是目前最通用、最可靠的方式,且与语言无关。
操作要点:
- Body选
raw,右上角下拉菜单选JSON(这会自动加Content-Type: application/json) - 输入合法JSON,支持任意深度嵌套:
{"user":{"name":"Alice","address":{"city":"Beijing"}},"tags":["a","b"]} - 后端用对应方法解析:Flask用
request.get_json(),Express用body-parser,Spring Boot用@RequestBody - 别手动在Headers里再加一遍
Content-Type——重复设置可能被覆盖或触发校验失败
如果接口硬性要求用form-data(比如带文件上传),嵌套字段只能靠约定命名
当必须混合上传文件和结构化数据时(例如头像+用户资料),form-data是唯一选择,但嵌套需靠“命名模拟”+后端配合。
Postman Mac版是一款专为macOS设计的API开发与测试工具,凭借简洁的界面和强大的功能,深受开发者喜爱。它支持发送各种HTTP请求(GET、POST、PUT等),轻松管理接口集合、环境变量和模拟服务器。Mac用户可享受原生性能、快捷键优化及与系统无缝集成的体验,适用于接口调试、自动化测试和文档生成。无论是个人项目还是团队协作,Postman for Mac都能提升API开发效率,是ma
可行做法:
- 把嵌套对象展平为带分隔符的键名,例如:
user.name、user.address.city、items.0.id - 文件字段单独传,如
avatar,和结构字段共存于同一form-data块中 - 后端需自行实现解析逻辑:按
.或[拆分键名,递归构建嵌套结构(很多框架有现成中间件,如Express的express-formidable) - 避免用
[]括号,某些网关或代理会过滤或转义方括号,导致键名损坏
容易被忽略的细节:JSON格式校验和空值处理
很多人输完JSON点Send就以为完事了,结果后端报400 Bad Request或None——问题往往出在肉眼难辨的格式或语义上。
必须检查:
- 所有双引号必须是英文
",不能是中文全角引号 - 末尾不能多逗号:
{"name":"Alice",}在严格JSON解析器中会失败 -
null、true、false必须小写,Null或TRUE会解析失败 - 空数组
[]和空对象{}是合法的,但user: null和user: {}语义不同,后端处理逻辑可能完全不同 - 用
http://json.cn/粘贴校验,比肉眼检查快十倍
嵌套越深,JSON格式容错率越低。一个多余的空格或漏掉的引号,整个请求体就变成无效字符串,后端连解析步骤都进不去。










