JSON & JSON序列化 & JSON解析
什么是JSON?
- 定义: 是一种非常重要的数据格式,不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式。
JSON序列化
- JSON.stringify( )
- 定义: 将值转为JSON字符串
- 参数: target, foramt, space
format: 用来指定数据序列化的数据或者修改数据内容 /* 指定数据序列化 这里需要传递一个指定内容的数组 */ let obj = { name: 'nano', age:18, height:180 } let jsonObj = JSON.stringify( obj, [ 'name', 'age' ] ) console.log( jsonObj ) --> {"name":" nano","age":18} /* 修改数据内容 这里需要传递一个回调函数 回调参数接收两个参数 key,value */ let obj = { name: 'nano', age:18, height:180 } let jsonObj = JSON.stringify( obj, (key, value)=>{ if(key === 'age'){ return value+=1 }else{ return value } } ) console.log( jsonObj ) --> {"name":"nano","age":19,"height":180} /* space: 用来进行格式化空格 */ let obj = { name: 'nano', age:18, height:180 } let jsonObj = JSON.stringify( obj, null, 2 ) console.log( jsonObj ) --> { "name": "nano", "age": 18, "height": 180 }
注意: 实际调用了对象的toJSON( )方法
JSON解析
- JSON.parse( )
- 定义: 将JSON字符串进行解析
- 参数: target , cb
/* cb: 转变解析参数的函数,接收两个参数(key,value) */ let obj = { name:'nano', age:18 } let jsonObj = JSON.stringify( obj ) let parseObj = JSON.parse( jsonObj, ( key, value )=>{ if(key === 'age'){ return --value }else{ return value } } ) console.log( parseObj ) --> {name: 'nano', age: 17}
注意:target参数只接受JSON字符串
深拷贝(乞丐版)
- JSON.parse( JSON.stringify() )
let obj = { name: 'nano', child:{ name:'roily' }, foo(){}, height:null, gf:undefined} let deepObj = JSON.parse(JSON.stringify( obj )) console.log( deepObj )
注意: 不会对方法和undefined的值,Symbol进行拷贝处理,深拷贝的值里面是不会出现的
注意: 不支持循环引用,拷贝会报错
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!