180418 JSON

JSON

JSON是什么

  • JSON [ JavaScript Object Notation ] 叫做 JavaScript对象表示法
  • JSON 是轻量级的文本数据交换格式

JSON用途

  • 用于结构化数据的交换。

JSON特点

  • JSON 独立于语言:JSON 虽然使用 Javascript语法 ( 利用了JavaScript中的一些模式来表示结构化数据。) 来描述数据对象,但是 JSON 仍然独立于语言和平台。

JSON语法(可以表示的数据类型)

  • “名称/值”对的集合。JavaScript中被理解为对象(object)。
    这里写图片描述
  • 值的有序列表。在大部分语言中被理解为数组(array)。
    这里写图片描述
  • 简单值:不支持undefined,字符串(属性名)必须用双引号
    这里写图片描述

示例

  • 对象:没有声明变量,对象属性必须加双引号。
//JavaScript

var object = {
    name:"Nichlas",
    age = 29
}  //在JavaScript中属性名也可以加双引号。

//JSON

{
    "name":"Nichlas",
    "age":29
}
  • 数组没有变量也没有分号。
[
    {
        "title":"dog",
        "author":[
            "Nicholas",
            "vat",
            "hello"
        ],
        "name":"candy"
    },
    {
        ...
    }
]

2.方法

ES5定义了全局对象JSON。

  • JSON.stringify() -> JavaScript对象序列化为JSON字符串
    • 默认情况下JSON.stringify()输出的JSON字符串不包含任何空格或缩进。
    • 所有函数,原型成员,值为undefined的属性都会被跳过。
    • 可以接收两个参数:
      • 第1个参数是待序列化对象
      • 第2个参数是过滤器,可以是数组,也可以是函数
      • 第3个参数是一个选项,是否保留缩进
//如果第2个参数是数组,那么结果只包含数组中列出的属性

var book = {
    "title":"test",
    "author":"one",
    edition:3,
    year:2018
}
var jsonText = JSON.stringify(book,["title","edition"]);

// {"title:"test","edition",3}

//如果第2个参数是函数,传入的函数接收两个参数:属性名和属性值。
//如果函数返回undefined,相应的属性会被忽略。

var book = {
    "title""test",
    "authors":"fog",
    edition:3,
    year:2019
};
var jsonText = JSON.stringify(book,function(key,value){
    switch(key){
        case "author":
            return value.join(",")
        case "year":
            return 5000;
        case "edition":
            return undefined;
        default:
            return value;
    }
});

//{"title":"test","author":"fog","year":5000}

//第三个参数如果是一个值,表示每个级别缩进的空格数[1-10]
//如果是字符串,可以将缩进字符设置为任意字符

JSON.stringify(book,null,4);
  • toJSON() -> 自定义JSON对象
var book = {
    "title""test",
    "authors":"fog",
    edition:3,
    year:2019,
    toJSON: function{
        return this.title;
    }
};
var jsonText = JSON.stringify(book);

//可以让toJSON返回任何值。返回undefined时,如果包含它的对象嵌入在另一个对象里,会返回null。如果它是顶级对象,结果就是undefined。

假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下:

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

  • JSON.parse() -> JSON字符串转换为JavaScript对象
  • 可以接收两个参数:
    • 第一个是还原的对象
    • 第二个是还原函数:同样接收一个键值对,如果还原函数返回undefined,则表示从结果中 删除 相应的键;如果返回其他值,则将该值插入到结果中。
var book = {
    "title""test",
    "authors":"fog",
    edition:3,
    year:2019,
    releaseDate:new Date(2011,11,1)
};

var jsonText = JSON.stringify(book);

var bookCopy = JSON.parse(jsonText,function(key,value){
    if(key == "releaseDate"){
        return new Date(value);
    }else{
        return value;
    }
});
通过还原函数将JSON字符串还原成Date对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值