服务器接收JSON数据格式不正确怎么办,是什么原因?

服务器接受 JSON 数据格式不正确,绝大多数时候不是解析代码的问题,而是请求头里的 Content-Type、原始字符串本身或字符编码这三处没对齐。 先别急着改后端逻辑,按顺序查这三样,能省下大量排查时间。

json怎么接收数据格式不正确?先检查这三处

有一次我在处理一个接口时,前端明明传了 JSON,后端拿到的却是普通的文本字符串,所有字段都读不出来,后来发现,请求头里的 Content-Type 是 application/x-www-form-urlencoded,服务器端根本没有进入 JSON 解析流程,这是最常见的“格式不正确”假象。

httpclient发送json数据_中文乱码问题
加载中
httpclient发送json数据_中文乱码问题

症状:接口报错或字段都是 null

  • 后端接口返回 400 Bad Request,提示消息体不可读。
  • 字段值全部为 null,但是日志里能看到原始参数键值对。
  • 解析时报 JSONParseException 或 Unexpected token。

如果你遇到这些,先从客户端发出的请求头查起。

关键点:Content-Type 必须写对

主流服务端框架(Spring Boot、Express、Flask)在解析请求体时,会先看 Content-Type,只有为 application/json(或者 application/json;charset=UTF-8)时,框架才会把请求体当作 JSON 处理,以下是实际踩坑对比:

发送方式 Content-Type 后端拿到的数据
表单提交 application/x-www-form-urlencoded 普通字符串
文件上传 multipart/form-data 表单字段
fetch/axios 未设置 text/plain;charset=UTF-8 原始字符串
正确 JSON 请求 application/json 可解析的 JSON 结构

修复方法很简单,在发送时显式设置请求头:

fetch('/api/user/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ userName: 'admin', password: '123456' })
})

实操:先用 curl 验证接口本身是否正常

用一条 curl 命令就能绕过前端,直接判断服务器能否正确接收 JSON:

curl -X POST http://localhost:8080/api/user/login 
  -H "Content-Type: application/json" 
  -d '{"userName":"admin","password":"123456"}'

如果这条命令能正常返回数据,说明接口本身没问题,问题就出在前端发送环节,如果这条命令也报格式错误,再继续往原始字符串方向排查。

服务器接收JSON数据格式不正确怎么办,是什么原因?

服务器json数据格式错误排查:字符串与对象是两码事

不少新手会混淆“JSON 字符串”和“JSON 对象”,服务器接收到的其实是一段很长的字符串,需要经过解析才能变成可操作的对象,如果你把字符串直接当作对象处理,自然就会出现“格式不正确”的错觉。

常见场景:用错了解析函数

  • 在 Node 中,把字符串交给 JSON.parse() 后得到对象。
  • 在 Python 中,用 json.loads(string) 得到字典。
  • 在 Java 中,用 ObjectMapper.readValue(jsonStr, User.class)。

如果不小心对已解析的对象再执行一次 JSON.parse,或者对字符串直接读取属性,都会抛出异常。

判断收到的数据是字符串还是对象

先打印原始请求体,看打印结果是否带引号。


注意,对象打印出来时键名是否带引号取决于语言环境和序列化方式,最可靠的办法是看变量的类型,前端发送时,一定要用 JSON.stringify() 包装数据,保证传输的是标准 JSON 字符串,后端接收后,再做一次解析。

常见的解析异常及含义

异常信息 含义
Unexpected token ‘o’ in JSON 把一个已解析的对象当字符串再次解析
Unexpected token ‘ in JSON 出现了单引号,JSON 只允许双引号
Expecting property name enclosed in double quotes 键名没有用双引号包裹
Bad escaped character in JSON 存在非法转义字符

json接收数据格式不对怎么办?按这套步骤走一遍

面对服务器提示 JSON 格式有问题,别盲改,这组排查顺序可以覆盖相当一部分情况。

第一步:打印原始请求体

在后端接口入口处,先不解析,直接打印请求体原始内容,这一步能区分是“没送到”还是“格式错”。

第二步:用校验工具检查字符串

把原始字符串拷贝到 JSON 校验工具里看是否合法,现在不少在线工具可以免费校验,对比几个常见的免费在线校验工具,功能差别不大,主要看能否一次性展示错误位置,挑选一个支持树形展示的即可。

第三步:检查数组和对象嵌套

服务器接收JSON数据格式不正确怎么办,是什么原因?

大括号和中括号是否匹配?数组中每个元素用逗号隔开,最后一个元素后不能有逗号,经常有人把最后一个字段后面多写一个逗号,导致整个 JSON 失效。

{"name":"张三","age":20}

合法,下面这个就不合法:

{"name":"张三","age":20,}

因为 20 后面多了一个逗号。

第四步:检查键名和字符串值的引号

JSON 标准要求使用双引号,不能用单引号,键名也必须加双引号。{'name':'张三'} 在严格模式下会解析失败,应当写成 {"name":"张三"}。

第五步:替换特殊字符

字符串值中如果包含换行、回车、Tab 或反斜杠,直接写原文会导致解析失败,正确做法是使用转义符:

  • 换行写成 n
  • 回车写成 r
  • Tab 写成 t
  • 双引号写成 "
  • 反斜杠写成 \

前后端json数据对接问题:编码和转义是隐形杀手

很多接口在本地测试一切正常,部署到服务器后却出现中文乱码或解析报错,这往往不是格式问题,而是编码问题。

统一编码是解决乱码的前提

行业共识认为,前后端统一使用 UTF-8 编码,能避免绝大多数跨平台中文乱码问题,服务器在返回响应时,不要只写 Content-Type: application/json,最好带上 charset=utf-8:

Content-Type: application/json; charset=utf-8

如果你的服务器用了默认的 ISO-8859-1 或 GBK,中文就会变成一串问号或乱码,特别是服务器所在地和本地环境不一致时,比如服务器部署在海外而本地是中文系统,这种差异更容易暴露出来。

BOM 头也可能让解析器报错

有些编辑器保存文件时会加入 BOM(字节顺序标记),这会在 JSON 字符串的开头增加不可见字符,服务器解析时可能报“意外的字符”,排查方法:用十六进制编辑器查看请求体的开头,如果有 EF BB BF 三个字节,去掉 BOM 再发送,保存文件时选择不带 BOM 的编码,或者在后端过滤掉开头多余字符。

转义不彻底导致的二次错误

前端发送的数据里如果包含反斜杠,比如路径 C:Usersname,必须写成 C:\Users\name,如果直接写单反斜杠,后端的 JSON 解析器会把它当作转义符,然后报错。

服务器接收JSON数据格式不正确怎么办,是什么原因?

json格式校验失败原因及后端防御性写法

与其每次出了问题到处排查,不如在后端做防御性处理,至少要让错误信息足够清晰,而不是抛出一堆堆栈。

后端兜底:解析失败时返回 400

在 Java 的 Spring Boot 中,可以统一处理 HttpMessageNotReadableException:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(HttpMessageNotReadableException.class)
    public ResponseEntity<String> handleUnreadable(HttpMessageNotReadableException e) {
        return ResponseEntity.badRequest().body("请求体格式不正确,请检查 JSON 语法");
    }
}

在 Express 中,可以增加一个简单的中间件:

app.use((err, req, res, next) => {
  if (err.type === 'entity.parse.failed') {
    return res.status(400).send('JSON 解析失败');
  }
  next(err);
});

前端发送前自校验

前端在 JSON.stringify 遇到非法值时,会丢弃函数和 undefined,如果你把一个包含 undefined 的对象直接传给服务器,服务器会看到属性缺失,这种“格式不正确”其实来自序列化时丢失了数据,建议发送前封装一个安全的序列化方法,对特殊类型做转换。

日志里不要打印完整对象,只打印必要字段

打印完整请求体会让敏感信息泄露,还会让日志文件迅速膨胀,业内专家指出,排查阶段可以临时打印,但上线前一定要移除或改为只记录字段名和长度。

服务器json怎么接收数据格式不正确?常见问题解答

为什么服务器总是收到字符串而不是 JSON 对象?

因为 HTTP 传输本质上就是纯文本,服务器框架必须根据 Content-Type 决定是否调用 JSON 解析器。Content-Type 不是 application/json,或者请求体本身结构不合法,服务器就拿不到对象。

请求体里的换行符都需要转义吗?

是的,JSON 字符串内部不能出现真实换行符,必须用 n 转义,如果整个 JSON 字符串包含多行,那是允许的,但字符串值内的换行必须转义,否则解析器会认为字符串结束,从而报错。

Content-Type 不一致一定会报错吗?

多数情况下会,部分框架会尝试自动解析,但自动解析仅在请求体内容非常标准时才成功,为了避免不确定行为,无论前后端环境如何,显式声明 application/json 是规范做法。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%8e%a5%e6%94%b6json%e6%95%b0%e6%8d%ae%e6%a0%bc%e5%bc%8f%e4%b8%8d%e6%ad%a3%e7%a1%ae%e6%80%8e%e4%b9%88%e5%8a%9e%ef%bc%8c%e6%98%af%e4%bb%80%e4%b9%88%e5%8e%9f%e5%9b%a0/

赞 (0)
怎么看一个服务器的IP地址?,服务器IP地址怎么查
上一篇 2026年10月18日 10:24
360服务器怎么安装win7系统?,重装步骤有哪些
下一篇 2026年10月18日 10:25

相关推荐

  • Excel网页图片怎么批量提取?, 有什么技巧

    要在Excel中稳定使用网页图片,关键在于选择正确的插入方式并管理好图片链接来源,否则容易出现显示异常或链接失效问题,Excel网页图片插入的三种实用方法直接使用在线图片功能在Excel 2016及以上版本中,插入选项卡下的“图片”菜单包含“在线图片”选项,点击后可以通过Bing搜索直接查找图片,或粘贴图片的U……

    2026年7月20日
    1800
  • aspx锚点如何正确使用与优化,提升网页导航体验之谜?

    在ASP.NET Web Forms中,锚点(Anchor)是一种用于在页面内实现快速导航的技术,通过链接跳转到同一页面的指定位置,提升用户体验和内容可访问性,它基于HTML的锚点机制,通过<a>标签的href属性指向页面内元素的id,实现平滑滚动定位,在ASP.NET中,这通常结合服务器控件和客户……

    2026年2月3日
    14400
  • Excel建表格不会操作?新手快速制作表格教程

    在 Excel 中创建表格非常简单,你可以根据需求选择手动输入或使用“表格”功能(推荐),以下是详细步骤:✅ 方法一:手动创建普通表格(适合简单数据)打开 Excel启动 Microsoft Excel,新建一个空白工作簿,输入表头(列标题)在第一行(如 A1、B1、C1…)输入每一列的名称,A1: 姓名B1……

    2026年7月9日
    12010
  • 我的世界中国版如何玩转2b2t服务器?,需要什么版本才能玩?

    要想在我的世界中国版中体验2b2t服务器,你必须使用国际版Java客户端并持有正版微软账号,再配合加速器才能连接,中国版客户端本身无法直接进入2b2t,为什么我的世界中国版无法直接连接2b2t我的世界中国版是网易代理的定制版本,其账号体系、服务器列表和网络协议都与国际版隔离,2b2t是一个运行在Java版国际环……

    2026年7月31日
    2100
  • 广州自来水公司智慧水务招标?智慧水务项目怎么投标

    2026年广州自来水公司智慧水务招标核心趋势已全面转向“AI大模型+数字孪生+全域感知”的新型基础设施建设,投标方需具备底层数据打通能力与国产化信创适配实力方能胜出,2026招标风向标:从单点信息化走向全域智能政策驱动与标准升级根据住房和城乡建设部2026年最新印发的《城乡供水数字化转型行动指南》,供水企业的智……

    2026年4月28日
    6200
  • 两台服务器怎么使用一个公网ip

    两台服务器使用一个公网IP的核心答案是:通过端口映射(NAT)、反向代理或内网穿透,将不同服务的流量按规则分发到内网的不同服务器上,这不是什么高深技术,而是机房和云平台里最常用的网络架构,说白了,就是让一台服务器当“前台接待”,另外一台在后台干活,两台服务器共用公网IP的底层逻辑很多人第一次接触这个场景时,会误……

    2026年8月25日
    1800
  • 服务器IP经常变化客户端怎么办,动态IP不稳定怎么解决?

    业务系统跑着跑着连不上数据库,排查半天发现服务器IP变了;远程办公连公司内网,今天能用明天就断,问运维才知道机房重新分配了地址,这类问题在中小公司、开发测试环境、家用服务器场景里非常普遍,核心解决办法是:让客户端不再直接记住IP,改为通过固定的域名去访问服务器,由动态域名解析(DDNS)或内网穿透工具来维护IP……

    2026年10月10日
    200
  • 一个服务器怎么连接SQL数据库,操作步骤有哪些

    连接SQL数据库并不复杂,核心是确认网络可达、认证正确、端口开放,再选择适合的工具或驱动进行操作,对于大多数开发者而言,服务器连接数据库是日常工作的基础环节,但“连不上”的报错却五花八门,本文将以最直接的路径,拆解从环境检查到连接成功的完整流程,并涵盖常见故障排查与安全设置,连接前的环境检查清单动手操作之前,先……

    2026年10月9日
    000
  • win10怎么看服务器日志文件,日志文件存放在哪里?

    Win10看服务器日志,结论先给:先分清“事件日志”还是“文件日志”,Windows服务器优先用事件查看器远程连接或PowerShell读取,Linux和应用日志用SSH、共享目录或云控制台读取,本地C盘通常没有你要的服务器日志, 下面按实际排障场景拆开讲,步骤和命令都能直接对照操作,先分清服务器日志类型,别在……

    程序编程 2026年10月22日
    100
  • ps42k20连不上服务器怎么回事?,怎么解决

    PS4连接不上服务器,多半是网络问题或索尼服务器临时抽风,先检查网络环境,再排查服务器状态,绝大多数情况都能自己搞定,PS4连不上服务器,先排查网络还是服务器?遇到PS4提示服务器连接失败,很多人第一反应是游戏机坏了,或者索尼又在搞事,相当一部分情况出在自家网络环境上,索尼官方服务器的状态也确实会影响连接,尤其……

    2026年8月5日
    1400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注