JavaScript JSON知识点汇总
编程小白也能看懂的JSON详细指南,包含基础概念、使用方法和实际示例
1. 什么是JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集,但完全独立于编程语言。
💡 简单理解:JSON是一种用于存储和传输数据的文本格式,就像快递单一样,让不同系统之间可以轻松传递数据。
JSON的主要特点:
- 易于人阅读和编写
- 易于机器解析和生成
- 完全独立于语言(几乎所有编程语言都支持JSON)
- 通常用于Web应用中服务器和客户端之间的数据交换
为什么需要JSON?
在Web开发中,浏览器(客户端)和服务器需要交换数据。JSON提供了一种简单、标准化的格式,使得数据交换变得简单高效。
2. JSON的基本结构
JSON数据由两种基本结构组成:
对象(Object)
用花括号{}包裹,包含多个键值对(key: value pairs)。键必须是字符串,值可以是JSON支持的任何数据类型。
{
"name": "张三",
"age": 28,
"isStudent": false,
"hobbies": ["读书", "旅行", "摄影"],
"address": {
"city": "北京",
"street": "朝阳路"
}
}
数组(Array)
用方括号[]包裹,包含多个值(可以是不同类型),值之间用逗号分隔。
[
"苹果",
"香蕉",
"橙子",
123,
true,
null
]
📌 重要规则:
- 键名必须用双引号包裹(单引号无效)
- 字符串值必须用双引号包裹
- 最后一个元素后面不能有逗号
3. JSON支持的数据类型
字符串(String)
"Hello, World!"
必须用双引号包裹
数字(Number)
45 3.14 -10
整数、小数、负数都可以
布尔值(Boolean)
true false
只有这两个值
空值(null)
null
表示空值
对象(Object)
{"name": "李四", "age": 30}
键值对集合
数组(Array)
[1, 2, "three", true]
有序的值列表
🚫 JSON不支持的类型:函数(function)、日期(Date)、undefined等,这些类型在转换时会丢失或被处理为null。
4. 在JavaScript中使用JSON
JavaScript提供了两个处理JSON的核心方法:
JSON.parse() – 解析JSON字符串
将JSON字符串转换为JavaScript对象(从字符串到对象)
const jsonString = '{"name": "王五", "age": 25}';
const person = JSON.parse(jsonString);
console.log(person.name); // 输出: 王五
console.log(person.age); // 输出: 25
JSON.stringify() – 转换为JSON字符串
将JavaScript对象转换为JSON字符串(从对象到字符串)
const personObj = {
name: "赵六",
age: 32,
isEmployed: true
};
const jsonStr = JSON.stringify(personObj);
console.log(jsonStr);
// 输出: {"name":"赵六","age":32,"isEmployed":true}
🔍 实用技巧:
JSON.stringify()可以接受两个额外参数:replacer函数(转换结果)和space(缩进空格数)- 使用
JSON.parse(JSON.stringify(obj))可以创建对象的深拷贝
5. 常见错误和注意事项
常见错误:
SyntaxError: Unexpected token– JSON格式错误(如缺少逗号、引号)TypeError: Converting circular structure to JSON– 对象存在循环引用- 使用单引号而不是双引号
- 最后一个属性后面多了一个逗号
注意事项:
- JSON.stringify()会忽略函数和undefined属性
- 日期对象会被转换为ISO格式的字符串
- JSON不支持注释(在JSON中添加注释会报错)
- JSON文件通常以.json作为扩展名
✅ 最佳实践:
- 使用JSON验证工具(如JSONLint)检查JSON格式
- 在AJAX请求中,使用JSON作为数据交换格式
- 在复杂应用中使用try-catch处理JSON解析错误
6. JSON实际应用场景
🌐 AJAX请求
从服务器获取数据:
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data));
📝 配置文件
存储应用配置:
// config.json
{
"apiUrl": "https://api.example.com",
"maxItems": 50,
"features": {
"darkMode": true,
"notifications": false
}
}
💾 本地存储
在浏览器中存储数据:
// 存储
const userSettings = { theme: 'dark', fontSize: 16 };
localStorage.setItem('settings',
JSON.stringify(userSettings));
// 读取
const settings = JSON.parse(
localStorage.getItem('settings'));
📤 API通信
发送数据到服务器:
const newUser = {
name: '钱七',
email: 'qian@example.com'
};
fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(newUser)
});
7. JSON与其他数据格式
了解JSON与其他常见数据格式的关系:
JSON vs XML
JSON更轻量、更易读:
// JSON
{"person": {"name": "张三", "age": 30}}
// XML
<person>
<name>张三</name>
<age>30</age>
</person>
JSON vs JavaScript对象
JSON是字符串,JS对象是数据结构:
// JSON字符串(文本)
'{"name": "李四"}'
// JavaScript对象(数据结构)
{ name: "李四" }
总结:JSON核心要点
键必须用双引号
字符串值用双引号
不支持注释
JSON.parse() 解析
JSON.stringify() 转换
数据交换格式
轻量级
跨语言
键值对结构
🎓 学习建议:
- 熟练掌握JSON.parse()和JSON.stringify()的使用
- 使用在线JSON验证工具检查你的JSON格式
- 在Chrome开发者工具中练习JSON的解析和序列化
- 尝试创建自己的JSON配置文件并在项目中读取