JSON & JSON序列化 & JSON解析

什么是JSON?

  1. 定义: 是一种非常重要的数据格式,不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式。

JSON序列化

  1. JSON.stringify( )
  2. 定义: 将值转为JSON字符串
  3. 参数: 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解析

  1. JSON.parse( )
  2. 定义: 将JSON字符串进行解析
  3. 参数: 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字符串

深拷贝(乞丐版)

  1. 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 协议 ,转载请注明出处!