【红宝书】第20章.JSON

 

JSON是一种轻量级的数据格式。JSON使用JS语法的子集表示对象、数组、字符串、数值、布尔值和null,不支持undefined

JSON.stringify()

    // JSON.stringify(arg1,arg2,arg3)

    // 第一个参数为要序列化的对象

    // 第二个参数为过滤器,可以是数据或者方法,非必填

    // 第三个参数为是否在JSON字符串中保留缩进,若是数值表示的是每个级别缩进的空格数,非必填

    let book={

      title:"九州缥缈录",

      author:"江南",

      year:2015,

      chapter:['蛮荒','苍云古齿','天下名将','辰月之征','一生之盟','豹魂']

    }

    let jsonText1 = JSON.stringify(book,['title','author'])

    console.log(jsonText1)

 

    let jsonText2 = JSON.stringify(book,function(key,value){

      switch(key){

        case 'year':

          return 2018

        case 'author':

          return '南大'

        default:

          return value

      }

    })

    console.log(jsonText2)

 

    // 主要传入有效的控制缩进的参数值,结果字符串就会包含换行符

    let jsonText3 = JSON.stringify(book,null,4)

    console.log(jsonText3)

 

toJSON()方法

    let book1={

      title:"九州缥缈录",

      author:"江南",

      year:2015,

      chapter:['蛮荒','苍云古齿','天下名将','辰月之征','一生之盟','豹魂'],

      toJSON:function(){

        return {

          title:this.title,

          author:this.author

        }

      }

    }

    let jsonText4=JSON.stringify(book1,['title'],2)

    console.log(jsonText4)

 

toJSON()可以作为函数过滤器的补充。假设把一个对象传入JSON.stringify(),序列化对象顺序如下:

  1. 如果存在toJSON()方法而且能通过它取得有效的值,则调用改方法,否则返回对象本身
  2. 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第1步返回的值
  3. 对第2步返回的每个值进行相应的序列化
  4. 如果提供了第三个参数,执行相应的格式化

JSON.parse()

    let obj = JSON.parse(jsonText,function(key,value){

      

    })

posted @ 2019-12-19 10:06  把我当做一棵树叭  阅读(194)  评论(0)    收藏  举报