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

相关推荐
Madison-No72 小时前
搭建项目测试环境
linux·运维·服务器·python
吴声子夜歌3 小时前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
悠悠121384 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
云老大-阿里云国际站代理商5 小时前
华为云国际站服务代理商:NAT网关怎么配?多台ECS共用公网IP要注意什么
服务器·华为云·云计算
zx_741484815 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS6 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
wdfk_prog7 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞7 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
浅念-8 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
日常筹谋记8 小时前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯