JavaScript对象表示法
JavaScript Object Notation
一种轻量级的数据交换格式
基本规则:
"name": "张三"{} 保存对象[] 保存数组有效的JSON:
{
"name": "张三",
"age": 30,
"isStudent": false,
"courses": ["语文", "数学"]
}
无效的JSON:
{
name: "张三", // 没有引号包裹键名
'age': 30, // 使用单引号
isStudent: false, // 没有引号包裹键名
// 这是注释 // JSON不允许注释
}
"Hello, World!"
必须使用双引号
42, 3.14, -1
整数或浮点数
true, false
只有true和false
{ "key": "value" }
键值对的集合
[1, 2, "three"]
有序的值列表
null
表示空值
// JavaScript对象
const person = {
name: "张三", // 键可以不带引号
age: 30,
isStudent: false,
sayHello: function() { // 可以包含函数
return "你好!";
},
birthday: new Date(), // 可以包含日期对象
address: undefined // 可以使用undefined
};
// JSON格式
{
"name": "张三", // 键必须带双引号
"age": 30,
"isStudent": false,
"courses": [ // 不能包含函数
"语文",
"数学"
],
"birthday": "2000-01-01", // 日期必须转为字符串
"address": null // 用null代替undefined
}
对象 → JSON字符串
JSON.stringify(对象, null, 2)
JSON字符串 → 对象
JSON.parse(字符串)
{
"员工": [
{
"姓名": "张三",
"年龄": 30,
"职位": "前端开发",
"技能": ["HTML", "CSS", "JavaScript"],
"联系方式": {
"电话": "13812345678",
"邮箱": "zhangsan@example.com",
"地址": {
"城市": "北京",
"街道": "朝阳区科技路100号"
}
},
"项目": [
{
"名称": "电商网站",
"完成度": 0.8,
"负责模块": ["用户界面", "购物车"]
},
{
"名称": "后台管理系统",
"完成度": 0.6,
"负责模块": ["数据可视化"]
}
],
"在职": true
},
{
"姓名": "李四",
"年龄": 28,
"职位": "后端开发",
"技能": ["Java", "Spring", "MySQL"],
"联系方式": {
"电话": "13987654321",
"邮箱": "lisi@example.com",
"地址": null
},
"项目": [],
"在职": true
}
],
"公司信息": {
"名称": "科技有限公司",
"成立时间": "2010-01-01",
"员工数量": 50,
"地址": "北京市海淀区"
}
}
这个JSON示例描述了一个公司的员工和基本信息:
{
"name": "张三",
"age": 30, // 注释不允许
'job': "程序员", // 单引号不允许
skills: ["JS", "CSS"], // 键需要引号
"salary": 10000, // 末尾多余的逗号
}
{
"name": "张三",
"getData": function() { // 函数不允许
return "数据";
},
"time": new Date(), // 日期对象不允许
"empty": undefined, // undefined不允许
"regex": /test/g // 正则表达式不允许
}
REST API的标准数据格式
// API请求
fetch('/api/users')
.then(response => response.json())
.then(data => console.log(data))
用于各类应用配置
// package.json
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"react": "^18.0.0"
}
}
轻量级数据存储
// localStorage存储
localStorage.setItem('user',
JSON.stringify({
name: '张三',
loggedIn: true
})
);
系统间数据交换
// 数据导出
const exportData = () => {
const data = JSON.stringify(records);
download('data.json', data);
}
不同编程语言间的桥梁
// Python处理JSON
import json
with open('data.json') as f:
data = json.load(f)
print(data['name'])
MongoDB等文档数据库
// MongoDB查询
db.users.find({
age: { $gt: 30 },
skills: "JavaScript"
})