如何用javascript处理JSON数据【教程】
发布时间 - 2026-01-24 00:00:00 点击率:次JavaScript处理JSON的核心是JSON.parse()和JSON.stringify();前者解析时需注意单引号、尾逗号、undefined等非法格式并用try/catch容错,后者会忽略函数/undefined/Symbol、转换Date为ISO字符串,深层嵌套推荐可选链与空值合并操作符。
JavaScript 处理 JSON 数据的核心就两件事:JSON.parse() 和 JSON.stringify()。其他所有“花活”都是

JSON.parse() 解析失败的常见原因和修复方法
不是所有看起来像 JSON 的字符串都能被成功解析。最常踩的坑是单引号、尾逗号、undefined 或注释 —— 这些在 JSON 标准里都不合法。
-
JSON.parse("{'name': 'Alice'}")→ 报错:单引号必须换成双引号 -
JSON.parse('{"name": "Alice",}')→ 报错:尾逗号不被允许(即使 Chrome 控制台能执行,也不符合标准) -
JSON.parse('{"value": undefined}')→ 报错:JSON 不支持undefined,只能是null - 如果不确定输入是否安全,加 try/catch:
try {
const data = JSON.parse(input);
} catch (e) {
console.error('无效 JSON:', e.message);
}
JSON.stringify() 的坑:函数、Date、undefined 会消失
JSON.stringify() 只序列化可枚举的自有属性,且对某些类型有默认行为 —— 这不是 bug,是设计如此。
- 函数、
undefined、Symbol 类型的属性会被直接忽略:JSON.stringify({ a: 1, b: () => {}, c: undefined }) // → '{"a":1}' -
Date对象变成 ISO 字符串:JSON.stringify({ t: new Date(2025, 0, 1) })→'{"t":"2025-01-01T00:00:00.000Z"}' - 需要自定义序列化?用第二个参数
replacer函数:JSON.stringify(obj, (key, val) =>
val instanceof Date ? val.toISOString() : val
)
处理深层嵌套或不确定结构的 JSON
真实接口返回的 JSON 常有可选字段、数组空值、类型混杂等问题。别依赖 obj.user.name 这种链式访问,容易报 Cannot read property 'name' of undefined。
- 用可选链操作符(ES2025+):
data?.user?.profile?.avatarUrl - 用空值合并操作符提供默认值:
data?.items ?? [] - 需要兼容老环境?写个安全取值工具函数:
const get = (obj, path, def) =>
path.split('.').reduce((o, k) => (o?.[k] !== undefined ? o[k] : def), obj) || def; -
后端返回
"count": null却期望是数字?显式转换:Number(data.count) || 0
JSON 不是 JavaScript 对象字面量,它更严格;而 JavaScript 对象也不是 JSON,它更自由。混淆这两者,是绝大多数解析/序列化问题的根源。
# javascript
# java
# js
# json
# 工具
# 后端
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
千库网官网入口推荐 千库网设计创意平台入口
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
如何用PHP快速搭建高效网站?分步指南
浅析上传头像示例及其注意事项
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
如何用狗爹虚拟主机快速搭建网站?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Laravel如何集成Inertia.js与Vue/React?(安装配置)
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
如何彻底删除建站之星生成的Banner?
如何生成腾讯云建站专用兑换码?
Linux系统运维自动化项目教程_Ansible批量管理实战
Android自定义控件实现温度旋转按钮效果
javascript如何操作浏览器历史记录_怎样实现无刷新导航
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
iOS UIView常见属性方法小结
如何基于云服务器快速搭建个人网站?
如何打造高效商业网站?建站目的决定转化率
Laravel怎么在Blade中安全地输出原始HTML内容
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
EditPlus中的正则表达式实战(6)
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
如何确保FTP站点访问权限与数据传输安全?
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何在香港服务器上快速搭建免备案网站?
Laravel怎么使用Intervention Image库处理图片上传和缩放
如何快速使用云服务器搭建个人网站?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
如何快速搭建虚拟主机网站?新手必看指南
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
微信小程序 五星评分(包括半颗星评分)实例代码
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?

