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

相关推荐
2401_868534785 小时前
分析RTOS与Linux有什么区别
linux·运维·服务器
Peace6 小时前
【Nginx】
linux·运维·nginx
网络与设备以及操作系统学习使用者7 小时前
Linux与Windows核心差异深度解析
linux·运维·网络·windows·学习
筠筠喵呜喵8 小时前
Linux CPU性能优化:D状态和Z状态排查与处理
linux·服务器·性能优化
Flash.kkl8 小时前
网络层协议IP、数据链路层、NAT详解
服务器·网络·网络协议·tcp/ip
ZC跨境爬虫9 小时前
模块化烹饪小程序开发日记 Day7:(菜谱详情接口开发与JSON数据读取全流程)
前端·javascript·css·ui·微信小程序·json
fiveym9 小时前
PXE安装Debian报错:GRUB安装失败排查指南
运维·debian
张小姐的猫10 小时前
【Linux】多线程 —— 线程同步 | 生产者消费者模型 | POSIX 信号量
linux·运维·服务器
handler0110 小时前
【MySQL】教你库与表的增删查改操作(基础)
运维·数据库·笔记·sql·mysql·数据·分析
tedcloud12310 小时前
academic-research-skills部署教程:构建AI辅助科研环境
服务器·人工智能·word·excel·dreamweaver