JSON 面试题及详细答案(实战版)_第1页
JSON 面试题及详细答案(实战版)_第2页
JSON 面试题及详细答案(实战版)_第3页
JSON 面试题及详细答案(实战版)_第4页
JSON 面试题及详细答案(实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JSON面试题及详细答案(实战版)一、基础概念类(入门必问)1、什么是JSON?它的核心作用是什么?答案:JSON全称JavaScriptObjectNotation,是一种轻量级、纯文本、跨语言的数据交换格式。核心作用主要有两点:1.用于前后端数据交互:前端页面和服务端接口之间,统一用JSON格式传递数据,是目前接口开发的主流格式;2.简单数据存储:可用于存储少量配置数据、临时数据,相比XML格式更简洁、读写速度更快。补充:JSON是独立的数据格式,不依赖JavaScript,几乎所有编程语言(Java、Python、Go、PHP等)都支持解析和生成JSON。2、JSON和JS对象的区别是什么?答案:很多人容易混淆两者,核心区别集中在格式、属性、类型三个维度:1.格式本质不同:JSON是纯文本字符串,可以跨语言传输;JS对象是浏览器/JS环境中的引用类型对象,只能在JS环境中使用;2.键名要求不同:JSON所有键名必须用双引号包裹;JS对象的键名可以不加引号,也可以用单引号、双引号;3.值类型限制不同:JSON仅支持字符串、数字、布尔值、数组、对象、null六种类型,不支持undefined、函数、日期;JS对象可以包含函数、日期、undefined等所有JS数据类型;4.可读性与传输:JSON可直接用于网络传输;JS对象无法直接传输,必须转为JSON字符串。3、JSON支持的数据类型有哪些?不支持哪些?答案:支持的6种类型:字符串(String)、数字(Number)、布尔值(Boolean)、数组(Array)、对象(Object)、空值(null)。绝对不支持的类型:undefined、函数、正则、日期对象、NaN、Infinity。实战注意:如果将包含函数、undefined的JS对象转为JSON,对应字段会直接丢失;日期对象会被转为ISO格式的字符串。4、标准JSON的语法规范有哪些硬性要求?答案:日常开发中必须遵守的规范,也是接口报错的常见原因:1.顶层结构只能是对象{}或数组[];2.所有键名必须是双引号,单引号、无引号都不符合标准;3.字符串值必须使用双引号;4.数值不能有前导零(如012不合法),不能写NaN、Infinity;5.布尔值和null全部小写,不能大写;6.末尾不能有多余逗号(对象、数组最后一个元素后禁止加逗号);7.不支持注释(//单行注释、/**/多行注释都不合法)。二、核心实操类(面试高频)1、JSON.stringify()和JSON.parse()的作用及使用场景?答案:这两个是JSON最核心的两个方法,用于JS对象和JSON字符串互转。1.JSON.stringify()作用:将JS对象/数组转为JSON字符串。常用场景:接口请求传参、本地存储localStorage/sessionStorage保存对象、数据缓存。2.JSON.parse()作用:将合法的JSON字符串解析为JS对象/数组。常用场景:接口返回数据处理、读取本地存储的字符串数据、解析配置文件。2、JSON.stringify()转换时会丢失哪些数据?答案:实战中高频踩坑点,转换规则如下:1.对象中值为undefined、函数的字段,转换后直接删除;2.数组中包含undefined、函数,转换后会变成null;3.NaN、Infinity、-Infinity转换后统一变为null;4.日期对象会被转为ISO时间字符串,不再是日期对象;5.正则对象会转为空对象{}。3、JSON.parse()解析报错的常见原因有哪些?答案:开发中90%的解析报错,都是以下不规范写法导致:1.键名或字符串使用单引号(标准仅支持双引号);2.对象、数组最后一个元素后多余逗号;3.JSON中包含注释内容;4.存在undefined、NaN、Infinity等非法值;5.解析空字符串、null、undefined等非标准JSON内容;6.接口返回数据存在换行、特殊转义字符未处理。实战解决方案:解析时用try-catch包裹,避免报错导致页面卡死。4、如何实现深拷贝?JSON深拷贝的优缺点是什么?答案:JSON深拷贝写法:通过先序列化、再解析实现对象深拷贝PlainText

letnewObj=JSON.parse(JSON.stringify(oldObj))优点:写法极简、无需引入工具、适合快速实现简单对象深拷贝,项目日常开发够用。缺点(核心坑点):1.会丢失undefined、函数、正则、NaN等特殊字段;2.会将日期转为字符串,拷贝后日期类型失效;3.不支持循环引用,对象存在循环引用时直接报错;4.性能较差,不适合超大对象拷贝。总结:简单纯数据对象可用此方法,复杂对象推荐手写递归深拷贝或使用lodash。三、进阶易错类(中高级面试)1、JSON.stringify的第二个、第三个参数分别有什么作用?答案:日常大多只用到第一个参数,后两个参数在数据格式化、日志打印时非常实用:第二个参数(替换器):可以是数组或函数1.传数组:只序列化数组中包含的键名,过滤其他字段;2.传函数:遍历每一个键值对,可自定义修改、过滤数据。第三个参数(缩进空格):用于格式化输出JSON字符串传数字(1-10):代表每层级缩进的空格数;传字符串:用对应字符串填充缩进。默认无缩进,压缩展示。2、JSON为什么不支持注释?答案:核心原因是设计初衷和实用性考量:1.JSON核心定位是数据交换格式,只负责传输纯数据,注释属于冗余内容,无数据意义;2.避免解析歧义:部分解析器无法兼容注释语法,容易导致解析报错,降低跨语言兼容性;3.减少文件体积:去掉注释可以精简文本体积,提升网络传输速度;补充:开发中看到的带注释的JSON都是非标准格式,仅部分编辑器支持,线上接口绝对不能使用。如需配置注释,可改用JSON5格式。3、JSON和XML的对比,为什么现在主流用JSON?答案:XML是早期主流数据格式,目前基本被JSON替代,核心优势如下:1.简洁轻便:JSON语法极简,无大量标签闭合,相同数据量下,JSON体积更小,传输更快;2.解析更简单:JS可直接通过内置方法解析JSON,无需DOM解析器;XML需要复杂的DOM解析,代码冗余;3.数据结构直观:JSON的对象、数组结构完全贴合前端数据思维,层级清晰;XML标签嵌套繁琐;4.跨语言兼容性更好:所有后端语言都对JSON有极致适配,接口开发效率更高。唯一劣势:XML支持自定义标签、注释、文档约束,适合复杂结构化文档,普通接口场景完全不如JSON。4、处理JSON解析异常的最佳实践是什么?答案:线上项目绝对不能直接写JSON.parse(),必须做异常捕获,标准实战写法:PlainText

functionparseJson(str){

try{

returnJSON.parse(str)

}catch(e){

//解析失败返回空值/默认数据,避免页面报错崩溃

returnnull

}

}补充优化方案:1.接口响应数据优先做格式校验,判断是否为字符串、是否为空;2.统一处理转义字符、换行符,避免特殊字符导致解析失败;3.封装全局公共解析方法,统一兜底逻辑。四、手写代码面试题1、手写安全的JSON解析方法(带容错)参考答案:PlainText

//安全解析JSON,报错返回默认值

functionsafeParseJSON(jsonStr,defaultValue={}){

//先校验参数合法性

if(!jsonStr||typeofjsonStr!=='string'){

returndefaultValue

}

try{

returnJSON.parse(jsonStr)

}catch(error){

console.error('JSON解析失败:',error)

returndefaultValue

}

}2、过滤JSON中的空值、无效字段参考答案:PlainText

//清除对象中null、undefined、空字符串字段

functionclearEmptyField(obj){

constnewObj={}

for(constkeyinobj){

constval=obj[key]

//过滤无效值

if(val!==null&&val!==undefined&&val!==''){

newObj[key]=val

}

}

returnnewObj

}五、综合面试问答1、接口返回的JSON数据乱码、格式错乱,如何排查?答案:按优先级排查:1.检查响应头编码格式,必须为UTF-8,避免中文乱码;2.查看后端返回数据是否存在多余空格、换行、特殊符号;3.校验后端返回的是否为标准JSON格式,是否存在单引号、多余逗号;4.排查前端是否重复解析、重复序列化数据;5.网络传输过程中是否存在数据截断、丢失问

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论