JSON
定义:是一种轻量级的数据组织格式和数据交换格式,它基于JS语言一个子集
语法
- 简单值:字符串,数值,布尔值,null可以在JSON中出现,undefined不可以
- 对象:第一种复杂数据类型,对象表示有序键值对
- 数组:第二种复杂数据类型,数组表示可以通过数值索引访问
注:JSON没有变量,函数,对象实例概念
JSON语法规则
//对象
{
"user":{
"username":"jack"
"age":"18"
}
}
//数组
["jack",18]
JSON存在形式
- 两种形式
JSON字符串形式
let jsonStr='{"name","jack"}'
JSON对象<=>JS简单对象
let jsonObj={name:"jack"}
- JSON两种形式准换
JSON对象=>JSON.stringify()=>JSON字符串
JSON字符串=>JSON.parse()=>JSON对象
序列化选项
JSON.stringify()
除了要序列化对象,还可接受两个参数
- 第一个参数过滤器
- 如果参数是数组,返回结果只会包含该数组列出对象的属性
- 如果参数是函数,可接受两个参数(属性名key和属性值value)
<script>
let book={
title:"js",
authors:[
"jack",
"rose"
],
num:1,
year:2000
}
//传入数组
let jsonBook=JSON.stringify(book,["title","num"])
console.log(jsonBook);
//结果{"title":"js","num":1}
//传入函数
let jsonBook2=JSON.stringify(book,(key,value)=>{
switch(key){
case "title":
return value
case "year":
return 5000;
default:
return value
}
})
console.log(jsonBook2);
//结果{"title":"js","authors":["jack","rose"],"num":1,"year":5000}
</script>
- 字符串缩进
JSON.stringify()
第三个参数控制缩进和空格
let book={
title:"js",
authors:[
"jack",
"rose"
],
num:1,
year:2000
}
let jsonBook3=JSON.stringify(book,null,"--")
console.log(jsonBook3);
//结果{
--"title": "js",
--"authors": [
----"jack",
----"rose"
--],
--"num": 1,
--"year": 2000
}
toJSON()
方法,该方法与date.toISOString()
本质上一样
let book2={
title:"js",
authors:[
"jack",
"rose"
],
num:1,
year:2000,
date:"1996-01-01T00:00:00+08:00",
toJSON:function(){
return this.date
}
}
let jsonBook4=JSON.stringify(book2)
console.log(jsonBook4);
//结果"1996-01-01T00:00:00+08:00"
解析选项
还原函数JSON.parse()
如果返回undefined,就会删除相应的键,如果是其他值,该值就会成为相应的键插入结果中
let book={
title:"js",
authors:[
"jack",
"rose"
],
num:1,
year:2000,
date:new Date(2022,1,1)
}
let jsonBook=JSON.stringify(book)
let newJsonbook=JSON.parse(jsonBook,(key,value)=>
key=="date"?new Date(value):value
)
console.log(newJsonbook.date.getFullYear());
//结果2022
持久化存储技术
- 持久化存储
硬盘=>持久化存储
内存=>临时存储 - 前端:localStorage
系统自动创建,直接使用
方法 | 含义 |
---|---|
localStorage.setItem(‘username’,‘jack’) | 设置存储名为username值为jack |
let value=localStorage.getItem(‘username’) | 获取存储名为username的值 |
locaStorage.removeItem(‘username’) | 移出存储名为username |
注:保存位置与域名有关