application/json 服务器收到的是字符串,还是json对象?

在 HTTP POST 请求中,服务器底层收到的请求体(body)始终是字节流(bytes)或字符串(string),即使客户端发送的是 JSON 数据,也不会直接收到一个"JSON 对象"。

为什么是字符串?

  • HTTP 协议传输的数据是纯文本或二进制流。
  • 当客户端发送 JSON 时,通常会:
    • 将 JavaScript 对象序列化为 JSON 字符串 (例如使用 JSON.stringify())。
    • 设置请求头 Content-Type: application/json
    • 将这个 JSON 字符串放入请求体中发送。
  • 服务器收到后,请求体就是一个 JSON 格式的字符串 (如 {"name": "test", "age": 30})。

服务器如何处理成 JSON 对象?

大多数现代 Web 框架会根据 Content-Type 自动解析:

  • Node.js + Express :使用 express.json() 中间件(或旧版的 body-parser)后,req.body 会直接是解析后的对象 (如 { name: 'test', age: 30 })。
  • Python + Flask :使用 request.get_json()request.json,如果 Content-Type 是 application/json,会返回解析后的字典对象 ;否则可以用 request.data 获取原始字符串/字节。
  • Java/Spring、PHP 等:类似,有内置或中间件自动解析成对象/Map。

如果没有正确设置 Content-Type: application/json,或框架没有启用解析中间件,服务器就只能拿到原始字符串,需要手动用 JSON.parse()(JS)或对应库解析。

总结

  • 原始收到:一定是字符串(或字节)。
  • 框架处理后:通常直接可用为 JSON 对象(更方便开发)。
  • 如果你自己写底层服务器(如纯 Node.js http 模块),就需要手动读取流并解析字符串。

如果你在具体框架中遇到问题(如收不到对象),检查请求头的 Content-Type 和框架的 body 解析配置即可。

相关推荐
星蓝_starblue4 小时前
零服务器、零数据库!开源growth-board,利用GitHub自动管理刷题/学习/求职全流程
服务器·数据库·程序人生·系统架构·node.js·github·改行学it
码智社6 小时前
JSON 零基础到资深全体系教程
java·json
Crazy________7 小时前
k8s部署若依微服务架构流程,v3.6.6
运维·云原生·容器·kubernetes·状态模式
云飞云共享云桌面7 小时前
广东精密机械设备工厂8-10人共享一台SolidWorks设计服务器
运维·服务器·3d·自动化·汽车·制造
jieyucx7 小时前
【高级利用】条件竞争与逻辑漏洞:与服务器赛跑的艺术
android·运维·服务器·web安全·文件上传
tianyuanwo7 小时前
服务器OS组件研发效能度量可视系统——顶层方案设计与阶段性规划
运维·服务器·度量系统
初级炼丹师(爱说实话版)8 小时前
Ubuntu服务器配置docker
服务器·ubuntu·docker
机建狂魔8 小时前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex
黄华SJ520it8 小时前
二二复制定点裂变双轨商城系统开发:原理、架构与实战指南
运维·小程序·架构·系统开发
生活爱好者!9 小时前
NAS还能用来开视频会议?docker一键部署MiroTalk SFU
运维·docker·容器