什么是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)本质是字符串,有严格语法规则:键名必须用双引号包裹,不能用单引号或不加引号;不允许尾随逗号;不支持函数、undefinedDateRegExp 等 JS 特有类型;null 合法,但 NaNInfinity 不合法。

常见错误现象:

  • 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 字符串;NaNInfinity 被转为 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邮件与通知系统发送步骤