【重走JavaScript之高级程序设计】JSON
1.【重走JavaScript之高级程序设计】 流程语句2.【重走JavaScript之高级程序设计】 操作符3.【重走JavaScript之高级程序设计】函数Function4.【重走JavaScript之高级程序设计】迭代器与生成器5.【重走JavaScript之高级程序设计】数组Array6.【重走JavaScript之高级程序设计】变量、作用域与内存7.【重走JavaScript之高级程序设计】客户端存储8.【重走JavaScript之高级程序设计】期约与异步函数9.【重走JavaScript之高级程序设计】BOM
10.【重走JavaScript之高级程序设计】JSON
11.【重走JavaScript之高级程序设计】集合和映射12.【重走JavaScript之高级程序设计】Math13.【重走JavaScript之高级程序设计】对象Object14.【重走JavaScript之高级程序设计】字符串String15.【重走JavaScript之高级程序设计】网络请求与远程资源16.【重走JavaScript之高级程序设计】JavaScript Api17.【重走JavaScript之高级程序设计】模块JSON
理解JSON最关键的一点是要把它当成一种数据格式,而不是编程语言。很多语言都有解析和序列化的JSON的内置能力。
1.语法
JSON语法支持表示三种类型的值。JSON没有变量、函数和对象实例的概念。
- 简单值:字符串、数值、布尔值和null可以在JSON中表示。特殊值undefined 不可以。
- JSON中的简单值包括:字符串、数值、布尔值和null。其中字符串必须用双引用包裹。
- 对象:第一种复杂数据类型,对象表示有序键/值对。其中每个值可以是简单值,也可以是复杂类型。
- JSON中对象与JavaScript的区别,对象属性名必须用双引用包裹,并且没有声明。
- 数组:第二种复杂数据类型,数组表示可以通过数组索引访问的值的有序列表。数组的值可以是任意类型,包括简单值、对象,甚至其他数组。
- JSON数组同样没有声明。
2.解析和序列化
2.1 JSON对象
JSON对象有两个方法:stringify()和parse()。两者互为逆操作,搭配使用可以达到深拷贝的效果。
- JSON.stringify(),方法将JavaScript对象序列化成JSON字符串。
- JSON.parse(),方法将JSON字符串解析成JavaScript对象。
2.2 序列化选项
JSON.stringify()方法可以接收两个参数,这两个参数用于指定其他序列化JavaScript对象的方法。
- 过滤结果
当参数为数组形式,JSON.stringify()返回的结果只会包含该数组列出的对象属性。
const book = {
author: "Matt",
title: "JavaScript权威指南",
content: "balabala"
};
// 通过第二参数,来过滤结果
const jsonTxt = JSON.stringify(book, ["author", "title"]);
console.log(jsonTxt); // {"author":"Matt","title":"JavaScript权威指南"}
当参数为函数形式,函数接受两个参数,属性名key和属性值value。可以根据着给key决定要对什么属性执行什么操作。这个key始终是字符串,只是在值不属于某个键/值对时会说空字符串。
const book = {
author: "Matt",
title: "JavaScript权威指南",
content: "balabala"
};
const jsonTxt = JSON.stringify(book, (key, value) => {
switch (key) {
case "author":
return value.toUpperCase(); // 当key为author,value转换成大写
case "title":
return undefined; // 返回undefined会忽略该属性
default:
return value; // 其他属性不做任何处理
}
});
console.log(jsonTxt); // {"author":"MATT","content":"balabala"}
- 字符串缩进
第三个参数控制缩进和空格。
2.3 toJSON()方法
自定义JSON序列化。在需要序列化的对中添加toJSON()方法。
let book = {
author: "Matt",
title: "JavaScript权威指南",
content: "balabala",
// 不能使用箭头函数,this指向全局
toJSON() {
return {
author: this.author,
title: this.title
};
}
};
let jsonTxt = JSON.stringify(book); // '{"author":"Matt","title":"JavaScript权威指南"}'
2.4 解析选项
JSON.parse()方法可以接收一个额外的参数,这个函数会针对每个键/值对都调用一次。
- 过滤结果
当参数为数组形式,JSON.parse()返回的结果只会包含该数组列出的对象属性。
let book = {
author: "Matt",
title: "JavaScript权威指南",
content: "balabala",
year: 2023,
releaseDate: new Date(2023, 1, 1)
};
let jsonTxt = JSON.stringify(book);
let bookCopy = JSON.parse(jsonTxt, (key, value) => (key == "releaseDate" ? new Date(value) : value));
console.log(bookCopy.releaseDate.getFullYear()); // 2023
洗尽铅华始见金,褪去浮华归本真
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现