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 解析配置即可。

相关推荐
牢姐与蒯1 分钟前
Linux进程(五).之环境变量
linux·运维·服务器·ubuntu
ZGi.ai2 分钟前
ZGI 文件产物:生成报告后怎样交付
大数据·运维·workflow·权限管理·zgi·智能体交付·文件产物
楠楠子呀11 分钟前
号码状态核验:从数据清洗到合规处理的实现思路
运维·自动化
小周学学学21 分钟前
GLPI 项目解读:开源 IT 资产管理与 ITSM 服务台平台
运维·开源·自动化·资产管理
码上有光23 分钟前
Linux:进程控制和进程替换
java·linux·服务器·进程控制·进程替换
weixin1997010801628 分钟前
《alibaba.idle.isv.order.ship 接入实录:闲鱼订单发货回传的5个隐式约束》(附Python源码)
服务器·前端·python
爱和冰阔落33 分钟前
【Linux】多线程打印为什么会乱?pthread 创建、等待、退出、取消与分离全实战
linux·运维·c++·redis
小马同学-33 分钟前
四、虚拟化技术
运维·云计算
Lzg_na37 分钟前
WiFi吞吐量和实际文件传输时速率差异原因以及定位
运维·网络
深圳多奥智能一卡(码、脸)通系统37 分钟前
智能梯控SDK可直接用于第三方开发对接的接口文档说明书
服务器·前端·算法