JSON数据格式

关于JSON,最重要的是要理解它是一种数据格式。

JSON语法

  1. 简单值
    数字、字符串、布尔值、null也是JSON的一种格式
    let numberJSON = JSON.parse(JSON.stringify(5));
    let stringJSON = JSON.parse(JSON.stringify("hello"));
    let booleanJSON = JSON.parse(JSON.stringify(true));
    let nullJSON = JSON.parse(JSON.stringify(null));
    
    console.log(numberJSON, stringJSON, booleanJSON, nullJSON) // 5 'hello' true null
  2. 对象
    表示的是一组无序的键值对
  3. 数组

不支持类型

  1. JSON不支持undefined、function和date等数据类型。

    let JavascriptObj = {
      a: 1, 
      b: undefined, 
      c: new Date(), 
      d: ()=>{}
    }
    let JSON_DATA = JSON.parse(JSON.stringify(JavascriptObj))
    
    console.log(JavascriptObj, JSON_DATA)


    undefined 和 function 会被跳过,date对象会被转换为日期字符串。

  2. 在对象中value为NaN或者Infinity,会被转换为null

    let book = {
      a: NaN,
      b: Infinity
    };
    let bookJSON = JSON.stringify(book);
    console.log(bookJSON) // {"a":null,"b":null}
  3. function、undefined、NaN、Infinitely在数组中会被转换为null

    let book = [1,2,()=>{},undefined,null,0,NaN, Infinity];
    let bookJSON = JSON.stringify(book);
    console.log(bookJSON) // [1,2,null,null,null,0,null,null]
  4. JSON.stringify()方法会忽略对象的不可遍历属性

    let obj = {};
    Object.defineProperties(obj, {
      'foo': {
        value: 1,
        enumerable: true
      },
      'bar': {
        value: 2,
        enumerable: false
      }
    });
    console.log(JSON.stringify(obj)); // {"foo":1}]
  5. 在JSON中最后一个属性的后面不应有逗号,否则会报错

    let JSONText = '{"name": "jack", "age": 2,}'
    console.log(JSON.parse(JSONText));

         去掉尾逗号,可正常解析

let JSONText = '{"name": "jack", "age": 2}'
console.log(JSON.parse(JSONText));

 JSON的两个方法

JSON对象有两个方法:stringify() 和 parse()

let book = {title: '红宝书', version: 3};
let bookCopy = JSON.parse(JSON.stringify({title: '红宝书', version: 3}));
console.log(book, bookCopy, book===bookCopy)

 虽然book和bookCopy具有相同的属性,但是它们两个独立的没有任何关系的对象。

  • JSON.stringify()
    第2个参数是过滤器,第3个参数表示是否在JSON字符串中保留缩进。
    // 可以是数组
    let book = {title: '红宝书', version: 3, sell: 1000};
    let bookJSON = JSON.stringify(book, ['title', 'sell']);
    console.log(bookJSON) // {"title":"红宝书","sell":1000}
    // 也可以是函数
    let book = {title: '红宝书', version: 3, sell: 1000};
    let bookJSON = JSON.stringify(book, (key, value)=>{
      if(key=='title'){
        return 888
      }else if(key=='version'){
        return undefined // 会被忽略
      }else{
        return value
      }
    });
    console.log(bookJSON) // {"title":888,"sell":1000}
    let book = {title: '红宝书', version: 3, sell: 1000};
    let bookJSON = JSON.stringify(book, null, 3);
    console.log(bookJSON)

     假设把一个对象传入JSON.stringify(),序列号该对象的顺序如下:
    1、toJSON
    2、如果有第二个参数,则应用这个函数过滤器
    3、序列化
    4、如果有第三个参数,则执行格式化

  • JSON.parse()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值