足球直播
足球直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
足球直播
足球直播
搜狗输入法
搜狗输入法
快连
快连
快连
快连下载
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
搜狗输入法
搜狗输入法
quickq下载
quickq官网
JSON面试知识点全解析:从基础到进阶,面试官常问问题都在这
JSON(JavaScript Object Notation)作为当前前后端数据交互的核心格式,几乎是所有开发岗位的必考知识点,无论是前端面试中的数据解析、接口对接,还是后端面试中的数据传输、序列化,JSON都占据着重要位置,本文将从JSON的基础概念、核心特性、常见面试题(含代码示例)到进阶应用场景,全面梳理面试中可能涉及的JSON知识点,助你从容应对面试。
JSON是什么?核心特性有哪些?
定义
JSON是一种轻量级的数据交换格式,基于JavaScript的一个子集(ECMAScript 3 1999标准),但独立于语言,几乎所有编程语言都支持JSON的解析和生成,其设计目标是“让人类易于读写,让机器易于解析和生成”。
核心特性
- 文本格式:JSON是纯文本,以
.json为文件后缀,可通过HTTP传输(如Content-Type: application/json)。 - 数据结构简单:支持两种核心结构:
- 对象(Object):无序的键值对集合,键必须是字符串(需用双引号包裹),值可以是多种类型。
- 数组(Array):有序的值集合,值可以是多种类型。
- 值类型丰富:支持6种数据类型:
- 基本类型:字符串(
"string")、数字(123、14)、布尔值(true/false)、null - 复合类型:对象()、数组(
[])
- 基本类型:字符串(
- 严格语法:
- 键必须用双引号(单引号非法);
- 值如果是字符串,必须用双引号;
- 末尾不能有逗号(如
{"name": "张三",}非法); - 支持嵌套结构(对象嵌套数组、数组嵌套对象等)。
与XML的对比(高频面试题)
| 特性 | JSON | XML |
|---|---|---|
| 可读性 | 更简洁(无标签嵌套) | 较繁琐(标签闭合) |
| 数据体积 | 更小(无结束标签) | 更大(重复标签) |
| 解析难度 | 解析简单(直接映射为语言对象) | 需DOM/SAX解析,较复杂 |
| 数据类型 | 原生支持数字、布尔、null等 | 所有数据均视为文本 |
| 扩展性 | 不支持注释(部分库扩展支持) | 支持注释、CDATA等 |
JSON的语法规则(细节决定成败)
面试中常通过“挑错题”考察对JSON语法的,以下是关键语法规则及示例:
对象(Object)
- 语法:
{"key1": value1, "key2": value2, ...} - 规则:
- 键必须是字符串,且必须用双引号()包裹;
- 值可以是任意JSON支持的类型;
- 键值对之间用逗号()分隔,最后一个键值对后不能有逗号。
合法示例:
{
"name": "李四",
"age": 25,
"isStudent": false,
"courses": ["math", "english"],
"address": {
"city": "Beijing",
"zip": 100000
}
}
非法示例(常见错误):
// 键用单引号(非法)
{'name': '王五'}
// 末尾有逗号(非法)
{"age": 30, "hobby": "reading",}
// 值为数字类型加引号(虽合法但非数字,需注意)
{"score": "95"} // 此时score是字符串,不是数字
数组(Array)
- 语法:
[value1, value2, ...] - 规则:
- 值可以是任意JSON支持的类型;
- 元素之间用逗号()分隔,最后一个元素后不能有逗号。
合法示例:
[
{"id": 1, "name": "商品A"},
{"id": 2, "name": "商品B"},
null
]
非法示例:
// 数组末尾有逗号(非法) [1, 2, 3,]
数据类型细节
- 字符串:必须用双引号,支持转义字符(如
\n、\t、\"、\\),但不支持单引号()。{"message": "他说:\"你好!\""} - 数字:支持整数、浮点数,不支持科学计数法(部分解析器支持,但JSON标准未定义)。
{"price": 99.9, "count": 100} - 布尔值与null:必须是小写(
true/false/null,大写非法)。{"isActive": true, "data": null}
JSON在开发中的核心应用场景
面试中常结合实际场景考察JSON的使用,以下是高频应用点:
前后端数据交互(核心场景)
- 场景描述:前端通过AJAX/Fetch请求后端API,后端返回JSON格式数据,前端解析后渲染页面。
- 示例:
- 后端返回JSON:
{"code": 200, "data": [{"id": 1, "name": "苹果"}], "msg": "success"} - 前端解析(JavaScript):
fetch('/api/fruits') .then(response => response.json()) // 解析JSON字符串为JS对象 .then(data => { console.log(data.data[0].name); // 输出:苹果 });
- 后端返回JSON:
配置文件
- 场景描述:项目中的静态配置(如环境变量、数据库连接信息)常用JSON存储,便于管理和修改。
- 示例(
config.json):{ "env": "production", "database": { "host": "localhost", "port": 3306, "username": "root", "password": "123456" }, "features": { "enableCache": true, "maxConnections": 100 } }
数据序列化与反序列化
-
序列化:将内存中的对象/数据结构转换为JSON字符串(便于传输或存储)。
-
反序列化:将JSON字符串解析为内存中的对象/数据结构(便于程序处理)。
-
示例(JavaScript):
// 序列化:JS对象 -> JSON字符串 const obj = { name: "赵六", hobbies: ["coding", "travel"] }; const jsonString = JSON.stringify(obj); console.log(jsonString); // 输出:{"name":"赵六","hobbies":["coding","travel"]} // 反序列化:JSON字符串 -> JS对象 const parsedObj = JSON.parse(jsonString); console.log(parsedObj.hobbies[0]); // 输出:coding
API响应格式(RESTful API)
-
场景描述:RESTful API通常以JSON作为标准响应格式,统一前后端数据交互规范。
-
常见响应结构:
// 成功响应 { "code": 200, "data": { "userId": 123, "token": "abc123..." }, "message": "登录成功" } // 错误响应 { "code": 400, "error": "Bad Request", "message": "用户名不能为空" }
高频面试题与解析(含代码示例)
JSON.parse() 和 JSON.stringify() 的使用场景及注意事项?
解析:
- JSON.parse():将JSON字符串解析为JS对象/数组。
- 使用场景:处理AJAX/Fetch返回的JSON响应、读取JSON配置文件。
- 注意事项:
- 参数必须是有效的JSON字符串,否则抛出
SyntaxError; - 可传入第二个参数(
reviver函数)用于转换解析后的值:
- 参数必须是有效的JSON字符串,否则抛出



还没有评论,来说两句吧...