如何用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配置与使用  微信小程序 五星评分(包括半颗星评分)实例代码  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?