JSON-JavaScript红宝书笔记

JSON

1. 语法

json支持三种类型:

  • 简单值:字符串、数值、布尔值和 null 可以在 JSON 中出现,。特殊值 undefined 不可以。
  • 对象:第一种复杂数据类型,对象表示有序键/值对。每个值可以是简单值,也可以是复杂类型。
  • 数组:第二种复杂数据类型,数组表示可以通过数值索引访问的值的有序列表。数组的值可以是任意类型,包括简单值、对象,甚至其他数组。

1.1 简单值

JSON字符串必须用双引号,而js可以用单引号和双引号
简单值包括:字符串、数值、布尔值和 null

1.2 对象

和js对象字面量差不多,不同的地方是属性名必须用双引号括住。

{ 
 "name": "Nicholas", 
 "age": 29, 
 "school": { 
 "name": "Merrimack College", 
 "location": "North Andover, MA" 
 } 
}

1.3 数组

数组和对象可以组合使用,以表示更加复杂的数据结构

[25, "hi", true]

2. 解析与序列化

2.1 JSON 对象

  • stringify()方法:JS转JSON
let book = { 
 title: "Professional JavaScript", 
 authors: [ 
 "Nicholas C. Zakas", 
 "Matt Frisbie" 
 ], 
 edition: 4, 
 year: 2017 
}; 
let jsonText = JSON.stringify(book);
  • parse()方法:JSON转JS
let bookCopy = JSON.parse(jsonText);

2.2 序列化选项

JSON.stringify()方法
三个参数:

  • 要处理的对象
  • 过滤器,可以是数组或函数,用于过滤对象中的参数
  • 字符串缩进

利用第二个参数过滤:

let book = { 
 title: "Professional JavaScript", 
 authors: [ 
 "Nicholas C. Zakas", 
 "Matt Frisbie" 
 ], 
 edition: 4, 
 year: 2017 
}; 
let jsonText = JSON.stringify(book, ["title", "edition"]);

此时json中只包含:

{"title":"Professional JavaScript","edition":4}

给第二个参数传函数:

let jsonText = JSON.stringify(book, (key, value) => { 
 switch(key) { 
 case "authors": 
 return value.join(",") 
 case "year": 
 return 5000; 
 case "edition": 
 return undefined; 
 default: 
 return value; 
 } 
});

不想用的属性,返回 undefined 忽略该属性

let jsonText = JSON.stringify(book, null, "--" );

这样,jsonText 的值会变成如下格式:

{ 
--"title": "Professional JavaScript", 
--"authors": [ 
----"Nicholas C. Zakas", 
----"Matt Frisbie" 
--], 
--"edition": 4, 
--"year": 2017 
}
toJSON()方法

toJSON()方法可以与过滤函数一起使用
(1) 如果可以获取实际的值,则调用 toJSON()方法获取实际的值,否则使用默认的序列化。
(2) 如果提供了第二个参数,则应用过滤。传入过滤函数的值就是第(1)步返回的值。
(3) 第(2)步返回的每个值都会相应地进行序列化
(4) 如果提供了第三个参数,则相应地进行缩进。

2.3 解析选项

JSON.parse()方法也可以接收一个额外的参数
这个函数会针对每个键/值对都调用一次

let book = { 
 title: "Professional JavaScript", 
 authors: [ 
 "Nicholas C. Zakas", 
 "Matt Frisbie" 
 ], 
 edition: 4, 
 year: 2017, 
 releaseDate: new Date(2017, 11, 1) 
}; 
let jsonText = JSON.stringify(book); 
let bookCopy = JSON.parse(jsonText, 
 (key, value) => key == "releaseDate" ? new Date(value) : value); 
alert(bookCopy.releaseDate.getFullYear());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值