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,中间任意一层为 nullundefined 都返回 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如何升级到最新版本?(升级指南和步骤)