版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JSON常见面试题及详细答案(实战接地气版)一、基础概念类1、什么是JSON?它的核心作用是什么?JSON是一种轻量级的、纯文本的数据交换格式,全称是JavaScriptObjectNotation。核心作用主要有两点:第一,实现前后端数据交互,是目前网页、小程序、APP开发中,前端和服务器接口通信的主流数据格式;第二,可用于简单的数据存储,比如项目配置文件、本地缓存数据等,读写便捷、体积小巧。它最大的特点是格式简单、跨语言通用,几乎所有编程语言都支持解析和生成JSON。2、JSON和JS对象有什么区别?(高频面试题)很多人容易混淆两者,核心区别集中在格式、属性、类型和用途上,具体如下:1.格式本质不同:JSON是纯文本字符串,不依赖JS环境,任何语言都能识别;JS对象是浏览器/JS引擎中的对象数据类型,仅JS环境可直接使用。2.键名要求不同:JSON的所有键名必须用双引号包裹,单引号、无引号都不合法;JS对象键名可以不加引号,也可以用单引号、双引号。3.支持的值类型不同:JSON仅支持字符串、数字、布尔值、数组、对象、null六种类型,不支持undefined、函数、日期、正则;JS对象可以包含函数、undefined、日期等所有JS数据类型。4.用途不同:JSON用于跨端、跨语言数据传输;JS对象是前端代码中用于逻辑处理的数据载体。3、JSON和XML的优缺点对比?为什么现在主流用JSON?1.语法简洁性:JSON格式简洁紧凑,标签冗余少,数据体积更小;XML标签成对出现,冗余代码多,文件体积大。2.解析难度:JSON可以直接转为JS对象,前端无需复杂解析;XML需要专门的解析器遍历节点,代码更繁琐。3.可读性:简单数据场景下JSON更直观,复杂层级数据XML结构更严谨,但日常开发JSON完全够用。4.扩展性:XML支持自定义标签、注释、命名空间,适合大型复杂数据规范定义;JSON不支持注释、自定义标签,轻量化更强。主流选用JSON的核心原因:前后端交互追求高效、轻量化,JSON传输速度更快、解析成本更低,完全满足绝大多数业务场景,而XML目前仅多用于老旧项目、金融、政务等规范性要求极高的场景。二、语法规范类(易错重点)1、JSON严格的语法规则有哪些?哪些写法是错误的?核心强制规范,也是面试常考改错点:1.顶层数据只能是对象{}或数组[],不能是单个字符串、数字、布尔值;2.所有键名必须双引号包裹,单引号、无引号、反引号均非法;3.字符串值只能用双引号,不能用单引号;4.末尾不能有多余逗号(对象最后一个属性、数组最后一个元素后禁止加逗号);5.不支持注释(单行//、多行/**/都不支持);6.不支持undefined、NaN、Infinity、函数等特殊值。常见错误示例:{name:"张三"}、{"name":"张三",}、{"age":undefined}、//姓名:张三均为非法JSON。2、JSON为什么不支持注释?核心是为了保持极简、通用、无歧义的设计初衷。首先,JSON定位是纯数据交换格式,只负责传输数据,不需要注释辅助说明,注释属于开发辅助内容,不属于业务数据;其次,支持注释会增加解析器的复杂度,不同语言的注释解析规则可能存在差异,容易出现跨语言解析报错、兼容性问题;最后,很多接口校验、格式化工具会直接过滤注释内容,带注释的JSON大概率会解析失败。补充:日常开发中如果需要备注说明,只能用自定义字段存储说明文本,不能写注释。3、JSON中null、空字符串、0、false的区别?业务中如何区分使用?这四个值在JSON中是完全不同的有效值,业务场景区分很关键:1.null:代表无数据、数据为空、未赋值,比如用户未填写的备用手机号、可选的备注字段;2.空字符串"":代表有字段,但是值为空文本,比如用户主动清空的昵称、简介;3.0:代表数值为0,是有效数值,比如商品库存为0、积分清零;4.false:代表布尔假值,状态类字段专用,比如是否会员、是否启用、是否完成。面试加分点:后端返回数据时,空值尽量统一规范,数值类型用0、状态用布尔、未知空数据用null、文本空值用空字符串,避免前后端判断逻辑混乱。三、JS操作JSON实操类(高频手写考点)1、JSON.stringify()和JSON.parse()的作用、参数及常见坑?这两个是前端操作JSON的核心方法,几乎面试必问。(1)JSON.stringify():JS对象转JSON字符串(序列化)作用:将前端的JS对象、数组转为后端可识别的JSON字符串,用于接口请求传参、本地存储。常见参数:支持三个参数,常规只用第一个,后两个用于进阶处理:参数1:需要转换的JS对象/数组;参数2:过滤器,可以是数组(指定保留字段)或函数(自定义处理每个键值对);参数3:缩进空格数,用于格式化输出JSON,方便查看。核心坑点(高频考点):①转换时会自动忽略undefined、函数、Symbol类型字段;②NaN、Infinity会被转为null;③日期对象会被转为ISO格式字符串;④循环引用的对象,转换会直接报错。(2)JSON.parse():JSON字符串转JS对象(反序列化)作用:将后端返回的JSON字符串,转为前端可操作的JS对象,用于页面渲染、逻辑处理。参数:第一个参数为合法JSON字符串,第二个参数为回调函数,可自定义解析后的键值处理逻辑。核心坑点:①只能解析标准JSON字符串,键名无双引号、带逗号、带注释都会解析报错;②无法还原日期对象、正则对象,解析后只会变成普通字符串。2、如何解决JSON.stringify丢失属性、转换异常的问题?针对不同异常场景,有对应的解决方案:1.丢失函数、undefined属性:业务中尽量不要用此类字段传参,若必须保留,可通过自定义序列化函数手动处理;2.NaN、Infinity转null:接口参数预处理,提前判断数值合法性,替换为0或null;3.循环引用报错:使用工具函数剔除循环引用字段,或使用递归深拷贝规避;4.日期格式转换问题:解析后手动格式化日期字符串为需要的格式。3、用JSON实现深拷贝的原理和缺陷?实现代码:letnewObj=JSON.parse(JSON.stringify(oldObj))原理:先将对象序列化为纯文本JSON字符串,断开原对象的引用关系,再反序列化为全新的JS对象,实现完全深拷贝。缺陷(面试必答):1.会丢失undefined、函数、Symbol类型的属性;2.NaN、Infinity会转为null;3.无法拷贝正则、日期对象(日期会变成字符串);4.存在循环引用的对象会直接报错;5.性能较差,超大对象转换耗时较长。适用场景:仅适合纯普通对象、数组的简单深拷贝,复杂数据结构必须用递归深拷贝或Lodash工具方法。四、业务实操与易错面试题1、接口返回的JSON解析报错,常见原因有哪些?如何排查?日常开发最常见的报错场景,核心原因和排查思路如下:1.后端返回格式不标准:键名未加双引号、末尾多余逗号、存在注释、单引号包裹字符串;2.返回数据为空或格式异常:接口返回空字符串、html报错页面、文本内容,不是标准JSON;3.特殊字符干扰:返回内容包含换行符、空格、隐藏特殊字符,破坏JSON结构;4.跨域或拦截器问题:请求拦截器、响应拦截器对数据做了错误处理,篡改了原始JSON格式。排查方式:先打印原始响应数据,复制到JSON格式化校验工具校验,定位语法错误;逐步剔除特殊字符、校验后端返回规范。2、JSON数组和普通JS数组有什么区别?接口返回数组需要注意什么?JSON数组是符合JSON规范的字符串数组,仅能存储字符串、数字、布尔、对象、数组、null,格式严格,无多余语法;JS数组可以存储函数、undefined、正则等任意类型数据,语法更宽松。接口注意事项:1.后端返回空数组必须是[],不能返回null、空字符串,避免前端遍历报错;2.数组内部字段格式要统一,避免同字段既有数字又有字符串,导致前端判断异常;3.大数据数组尽量精简字段,减少传输体积。3、前端本地存储localStorage为什么必须用JSON转换?因为localStorage、sessionStorage只能存储字符串格式数据。如果直接存储JS对象/数组,会自动调用toString()方法,最终存储为"[objectObject]"无效文本,无法读取真实数据。所以必须通过JSON.stringify()序列化后存储,读取时用JSON.parse()反序列化还原为对象,这是前端本地存储的标准写法。4、如何优雅处理JSON解析异常,避免页面报错崩溃?实际开发中,不确定后端返回格式是否标准时,必须做异常捕获,核心方案是try-catch包裹解析逻辑。示例逻辑:1.用try执行JSON.parse()解析数据;2.若解析报错,进入catch捕获异常,给默认空值(空对象、空数组),不影响页面渲染;3.可在catch中打印错误日志,方便排查后端格式问题。这是生产环境必备的容错逻辑,能有效避免单条数据格式错误导致整个页面白屏、崩溃。五、进阶面试题1、说说JSON序列化的优先级?toJSON方法的作用?如果对象自定义了toJSON()方法,执行JSON.stringify()时,会优先读取toJSON的返回值进行序列化,而非对象本身的属性。业务用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年执业医师考试试卷真题
- 2025年中医肛肠科手术手术护理质量评估测试卷
- 2026年部编版初中英语下册第9单元语法练习题及答案
- 2026人工智能应用开发行业市场供需状况分析及投资决策规划报告
- 2026人工智能产业发展潜力研究与商业模式创新及战略布局分析报告
- 2026乐高积木行业市场竞争格局与投资规划分析报告
- 2026中国直播电商行业用户画像与消费行为研究报告
- 2026中国植物基食品口感改良技术与市场营销策略报告
- 2026年深海探测技术装备发展与应用模拟试题及答案
- 2026年人教版高三政治第10单元中国特色社会主义文化建设测试卷及答案
- CJ/T 192-2017内衬不锈钢复合钢管
- DB31/ 700-2013钢质冷模锻件单位产品能源消耗限额
- 小学体育课站队知识课件
- 华图面试协议班合同
- 服务合同简明范本
- JT-T-1039-2016公路桥梁聚氨酯填充式伸缩装置
- QB-T5589-2021实验室家具通风柜
- 高考专题复习:视频拍摄脚本写作
- 照明照度计算表
- GB/T 42061-2022医疗器械质量管理体系用于法规的要求
- GB/T 34868-2017废旧复印机、打印机和速印机再制造通用规范
评论
0/150
提交评论