系列
JavaScript教程
JSON
2018-03-04大约10分钟
JavaScript Object Notation(JSON)是一种格式用来序列化对象、数组、数值、字符串、布尔值和 null 。JSON是如今一种很流行的格式,其他常见的格式有XML,YAML,ProtoBuf等。
序列化/反序列化
简单来说,程序运行时,内存中的对象通常都是二进制的格式,但为了能够把这些对象保存到磁盘、数据库或传递给其他的程序使用,就需要先转换成一种通用的格式。
把对象转成指定的格式,称之为序列化;反之,把数据转换成程序的对象,就是反序列化。
JavaScript里面,也提供了序列化和反序列话的原生方法。
JSON.stringify()
: 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串JSON.parse()
:方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。
后面将对这两个序列化函数做介绍。
JSON.stringify()
JSON.stringify(value)
: 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串。
序列化一个空对象:
const jsonValue = JSON.stringify({});
console.log(`JSON value: ${jsonValue}`);
序列化布尔值:
const jsonValue = JSON.stringify(true);
console.log(`JSON value: ${jsonValue}`);
序列化字符串:
const jsonValue = JSON.stringify("Hello");
console.log(`JSON value: ${jsonValue}`);
序列化数组:
const jsonValue = JSON.stringify([1, "false", false]);
console.log(`JSON value: ${jsonValue}`);
序列化普通对象:
const user = { name: "张三", age: 15 };
const jsonValue = JSON.stringify(user);
console.log(`JSON value: ${jsonValue}`);
JSON.stringify(value, replacer, space)
还有两个非必需的参数:replacer和space,可以用来对序列化的结果做一些定制,用到的时候,可以再详查文档。
JSON.parse()
JSON.parse()
:方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。
const user = JSON.parse('{"name":"张三","age":15}');
console.log(`Name: ${user.name}`);
console.log(`Age: ${user.age}`);
对于parse更多的类型:
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null
JSON.parse('1'); // 1
JavaScript 与 JSON 的区别
从JavaScript Object Notation这个字面来理解,很容易认为JSON是基于JavaScript的对象的表示语法的,那么这个语法就应该是JavaScript语言的一部分。
实际上呢,它基于 JavaScript 语法,但与之不同:JavaScript不是JSON,JSON也不是JavaScript 。参考:JSON:不是JavaScript 的子集。
JavaScript类型 | JSON 区别 |
---|---|
对象和数组 | 属性名称必须是双引号字符串;最后一个属性后不能有逗号。 |
数值 | 前导零是禁止的(在 JSON.stringify 零将被忽略,但在 JSON.parse 它将抛出 SyntaxError);小数点后必须至少有一位数字。 |
字符串 | 只有有限的一些字符可能会被转义;禁止某些控制字符;字符串必须是双引号;等等。 |