javascript JSON如何解析_怎样处理API返回数据【教程】
发布时间 - 2026-01-30 00:00:00 点击率:次JSON解析难点在于数据结构不一致、字段缺失、类型错乱及网络异常;SyntaxError多因后端返回HTML/JSONP/BOM等非标准JSON;res.json()不校验HTTP状态码,需手动判断res.ok;取嵌套字段应使用可选链或兜底逻辑;前后端字段命名差异需解析后映射。
JSON 解析本身很简单,JSON.parse() 就能搞定;真正卡住人的,是 API 返回数据结构不一致、字段缺失、类型错乱,或者没处理好网络异常和空响应。
遇到 SyntaxError: Unexpected token 怎么办
这几乎全是 JSON.parse() 报的错,说明传进去的不是合法 JSON 字符串。常见原因:
- 后端返回了 HTML(比如 500 错误页、登录跳转页),而不是 JSON —— 先用
response.text()打印原始响应体看一眼 - 响应头没设
Content-Type: application/json,但浏览器不会因此拒绝解析,只是容易误判编码;真正影响的是你手动读取时用了错误方式 - 字符串里混入了 BOM(尤其是 Windows 记事本保存的 JSON 文件),可用
str.replace(/^\uFEFF/, '')清除 - 后端返回了 JSONP 格式(如
callback({...})),这不是标准 JSON,不能直接parse
fetch().then(res => res.json()) 为什么有时还是报错
res.json() 是个异步方法,它只负责解析响应体,但不检查 HTTP 状态码。404、500、甚至 204 响应都可能触发它,而 204 没有响应体,会直接 reject。
- 必须在
.json(前加状态判断:
)
if (!res.ok) throw new Error(res.status) - 空响应(如
204 No Content)会导致res.json()报Unexpected end of JSON input,此时应改用res.text()并手动判断是否为空字符串 - 某些接口返回
text/plain但内容其实是 JSON,res.json()会因 MIME 类型不匹配失败,此时改用res.text().then(JSON.parse)
解析后怎么安全取嵌套字段(比如 data.user.profile.name)
别直接链式访问,一碰 undefined 就崩。现代 JS 推荐用可选链操作符,但要注意兼容性:
- 支持环境(ES2025+):直接写
data?.user?.profile?.name,中间任意一层为null或undefined都返回undefined - 需兼容旧环境:用逻辑运算符兜底,如
((data || {}).user || {}).profile || {},或封装一个安全取值函数 - 更稳妥的做法是结合 TypeScript 类型守卫,或用
zod/yup做运行时校验,避免靠经验猜字段是否存在
最常被忽略的一点:后端字段命名风格(snake_case)和前端(camelCase)不一致,光靠解析解决不了——得在解析后做一次字段映射,否则后续所有调用都得写 user['first_name'] 这种反直觉写法。
# javascript
# java
# html
# js
# 前端
# json
# typescript
# windows
# 编码
# 浏览器
# NULL
# 运算符
# 逻辑运算符
# if
# 封装
# throw
# Error
# Token
# 字符串
# 数据结构
# 接口
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript如何操作视频_媒体API怎么控制播放
如何快速搭建虚拟主机网站?新手必看指南
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何快速搭建安全的FTP站点?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
如何快速生成ASP一键建站模板并优化安全性?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
如何在IIS7中新建站点?详细步骤解析
中山网站推广排名,中山信息港登录入口?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
iOS中将个别页面强制横屏其他页面竖屏
公司网站制作价格怎么算,公司办个官网需要多少钱?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
Python文件流缓冲机制_IO性能解析【教程】
nginx修改上传文件大小限制的方法
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Laravel如何使用Vite进行前端资源打包?(配置示例)
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel如何记录自定义日志?(Log频道配置)
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
怎么用AI帮你为初创公司进行市场定位分析?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Laravel怎么调用外部API_Laravel Http Client客户端使用
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
5种Android数据存储方式汇总
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
如何自定义建站之星模板颜色并下载新样式?
Android仿QQ列表左滑删除操作
如何选择PHP开源工具快速搭建网站?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
如何快速辨别茅台真假?关键步骤解析
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
如何用VPS主机快速搭建个人网站?
微信小程序 input输入框控件详解及实例(多种示例)
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
如何在建站宝盒中设置产品搜索功能?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
智能起名网站制作软件有哪些,制作logo的软件?
如何快速生成橙子建站落地页链接?
如何快速打造个性化非模板自助建站?
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Laravel如何升级到最新版本?(升级指南和步骤)


