什么是JSON以及如何在javascript中解析它?【教程】
发布时间 - 2026-01-29 00:00:00 点击率:次JSON是严格格式的字符串,键名须双引号、禁尾逗号、不支持函数/undefined/Date等JS类型;解析用JSON.parse()(需字符串输入+try...catch),序列化用JSON.stringify()(忽略undefined/函数/Symbol,循环引用报错)。
JSON 是一种轻量级的数据交换格式,不是 JavaScript 的专属语法,但 JavaScript 原生支持解析和生成它——JSON.parse() 和 JSON.stringify() 就是唯二需要掌握的核心方法。
JSON 是什么:不是对象,也不是 JS 代码
JSON(JavaScript Object Notation)本质是字符串,有严格语法规则:键名必须用双引号包裹,不能用单引号或不加引号;不允许尾随逗号;不支持函数、undefined、Date、RegExp 等 JS 特有类型;null 合法,但 NaN 和 Infinity 不合法。
常见错误现象:
-
JSON.parse("{name: 'Alice"}')→ 报错:键名没双引号 -
JSON.parse('{"age": 25,}')→ 报错:末尾逗号 -
JSON.parse('{"time": new Date()}')→ 报错:new Date()不是合法 JSON 值
用 JSON.parse() 安全解析字符串
它只接受字符串输入,其他类型会先被转成字符串再解析(通常导致意外结果),所以务必确认输入是字符串。
实操建议:
-
后端返回的响应体(如
fetch().then(r => r.text()))需显式转为字符串再解析,不要依赖自动转换 - 加
try...catch捕获解析失败,避免静默崩溃:try { const data = JSON.parse(jsonString); } catch (e) { console.error('JSON 解析失败:', e.messag
e); }
- 可传入第二个参数
reviver函数,在解析过程中过滤或转换值,比如把时间字符串转为Date对象
用 JSON.stringify() 序列化时注意边界情况
它会忽略 undefined、函数、Symbol 类型的属性;循环引用直接抛错;Date 对象会被转为 ISO 字符串;NaN 和 Infinity 被转为 null。
常见陷阱:
-
JSON.stringify({x: undefined, y: 1})→"{"y":1}"(x消失了) -
const obj = {}; obj.self = obj; JSON.stringify(obj)→ 抛出TypeError: Converting circular structure to JSON - 想保留
Date或自定义格式?得用replacer参数或提前处理字段
浏览器和 Node.js 兼容性基本不用操心
JSON 对象在 IE8+、所有现代浏览器及 Node.js 0.10+ 中都原生存在,无需 polyfill。但要注意:某些嵌入式 JS 环境(如旧版微信小程序 WebView、部分 IoT 设备 JS 引擎)可能不支持 JSON 全局对象,这时才需检查是否存在并 fallback。
真正容易被忽略的是:JSON 只是数据载体,它不携带类型信息、不包含行为逻辑——解析出来的永远是纯数据对象,没有原型链、没有方法。如果业务依赖 Date 实例或自定义类结构,必须在解析后手动重建。
# javascript
# java
# js
# node.js
# json
# node
# 微信小程序
# 微信
# 浏览器
# 小程序
# 后端
# Object
# NULL
# date
# try
# catch
# const
# 字符串
# 循环
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
详解Android——蓝牙技术 带你实现终端间数据传输
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
EditPlus 正则表达式 实战(3)
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
php 三元运算符实例详细介绍
Bootstrap CSS布局之列表
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Laravel Docker环境搭建教程_Laravel Sail使用指南
想要更高端的建设网站,这些原则一定要坚持!
Swift中循环语句中的转移语句 break 和 continue
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
如何挑选最适合建站的高性能VPS主机?
Android Socket接口实现即时通讯实例代码
教你用AI将一段旋律扩展成一首完整的曲子
千库网官网入口推荐 千库网设计创意平台入口
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
详解Oracle修改字段类型方法总结
linux top下的 minerd 木马清除方法
如何做网站制作流程,*游戏网站怎么搭建?
Laravel如何实现文件上传和存储?(本地与S3配置)
如何用PHP快速搭建CMS系统?
如何在香港服务器上快速搭建免备案网站?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Python并发异常传播_错误处理解析【教程】
Laravel如何处理表单验证?(Requests代码示例)
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何快速建站并高效导出源代码?
在线教育网站制作平台,山西立德教育官网?
如何选择PHP开源工具快速搭建网站?
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
如何快速搭建高效WAP手机网站?
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
如何在万网自助建站平台快速创建网站?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Thinkphp 中 distinct 的用法解析
Laravel如何保护应用免受CSRF攻击?(原理和示例)
如何在阿里云ECS服务器部署织梦CMS网站?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤


