描述
谈到JSON,就能想到 交互 和 前后端数据交换。
JSON(JavaScript Object Notation, JS对象标记),是一种轻量级的数据交换格式。
它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON格式的数据,主要是为了跨平台交流数据用的。JSON独立于语言和平台,JSON解析器和JSON 库支持许多不同的编程语言。
XML (EXtensible Markup Language, 扩展标记语言)
JSON出现之前,XML一直是互联网传输结构化数据的事实标准,使用DTD(document type definition)文档类型定义来组织数据,一度成为业界公认的标准,特点是:
1.格式统一
2.跨平台和语言
3.描述复杂结构能力较强
4.xml使用标签对描述数据内容
JSON(JavaScript Object Notation, JS对象标记)
在2002年的一天,道格拉斯·克罗克福特(Douglas Crockford)发明了JSON这种超轻量级的数据交换格式。
道格拉斯同学长期担任雅虎的高级架构师,自然钟情于JavaScript。他设计的JSON实际上是JavaScript的一个子集。
由于JSON非常简单,很快就风靡Web世界,并且成为ECMA标准。几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。
把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。
如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。
JSON是一种轻量级的数据交换格式,特点是:
1.简单易读
2.轻量级
3.传输速度比XML快
4.支持多种语言
5.能够使用内建的 JavaScript eval() 方法进行解析
6.JSON是使用键值对的形式来描述数据
数据类型
number:和JavaScript的number完全一致;
boolean:就是JavaScript的true或false;
string:就是JavaScript的string;
null:就是JavaScript的null;
array:就是JavaScript的Array表示方式 [];
object:就是JavaScript的object表示方式 { … }。
以及上面的任意组合。
为了统一解析,JSON的字符串规定必须用双引号”“,Object的键也必须用双引号”“。
stringify方法 序列化
先把一个对象序列化成JSON格式的字符串:
var neo = {
name: '倪云港',
age: 19,
school: 'HLJU',
skills: ['JavaScript', 'C++', 'Git', 'Vue']
};
JSON.stringify(neo);
输出结果:
"{"name":"倪云港","age":19,"school":"HLJU","skills":["JavaScript","C++","Git","Vue"]}"
要输出得好看一些,可以加上第三个参数,按缩进输出:
JSON.stringify(neo, null, ' ');
输出结果:
"{
"name": "倪云港",
"age": 19,
"school": "HLJU",
"skills": [
"JavaScript",
"C++",
"Git",
"Vue"
]
}"
stringify方法第二个参数用来控制筛选对象的键值,如果我们只想输出指定的属性,可以传入Array:
JSON.stringify(neo, ['name', 'skills'], ' ');
输出结果:
"{
"name": "倪云港",
"skills": [
"JavaScript",
"C++",
"Git",
"Vue"
]
}"
stringify方法第二个参数还可以传入一个函数,这样对象的每个键值对都会被函数先处理:
function convert(key, value) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}
//上面的代码把所有属性值都变成大写:
JSON.stringify(neo, convert, ' ');
输出结果:
"{
"name": "倪云港",
"age": 19,
"school": "HLJU",
"skills": [
"JAVASCRIPT",
"C++",
"GIT",
"VUE"
]
}"
如果还想要精确控制如何序列化neo,可以给neo定义一个toJSON()的方法,直接返回JSON应该序列化的数据:
var neo = {
name: '倪云港',
age: 19,
school: 'HLJU',
skills: ['JavaScript', 'C++', 'Git', 'Vue'],
toJSON: function () {
return { // 只输出name和age,并且改变了key:
'Name': this.name,
'Age': this.age
};
}
};
JSON.stringify(neo);
输出结果:
"{"Name":"倪云港","Age":19}"
JSON.parse()方法 反序列化
拿到一个JSON格式的字符串,我们直接用JSON.parse()把它变成一个JavaScript对象:
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45
var datatext = '{"name" : "倪云港","skills" : ["JavaScript", "C++", "Git", "Vue"] }';
var data = JSON.parse( datatext );
console.log(data);
输出结果:
Object {name: "倪云港", skills: Array(4)}
name:"倪云港"
skills:Array(4)
0:"JavaScript"
1:"C++"
2:"Git"
3:"Vue"
length:4
__proto__:Array(0)
__proto__:Object