JSON(JavaScriptObjectNotation,JS对象表示法)是一种轻量级的数据交换格式,一般用于从服务器到网页的数据传输。 与 XML 一样,JSON 也是一种基于纯文本的数据格式。
Json文件的文件后缀为.Json,Json文本的MIME类型为application/Json。
出现 JSON
在 JSON 出现之前,您仍然使用 XML 来传递数据。 由于XML是一种纯文本格式,因此适合在Internet上交换数据。 XML 本身并不复杂。 然而,在增加了DTD、XSD、XPath、XSLT等大量复杂的规范之后,任何一个正常的软件开发人员遇到XML都会觉得头大。 最后,你发现即使你努力学习几个月,也可能对XML规范不清楚。
终于,在2002年的三天时间里,道格拉斯·克罗克福德(Douglas Crockford)的朋友发明了JSON这种超轻量级的数据交换,以拯救一位深陷水深火热、常年被几大软件巨头欺骗的软件工程师。 格式。
由于 JSON 非常简单,因此它很快风靡 Web 世界并成为 ECMA 标准。 几乎所有的编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript外部有JSON解析。
Json结构
Json有两种基本结构,即Json对象和Json字段。 通过Json对象和Json链表的组合可以表示各种复杂的结构。
Json对象
对象结构以 { 开头,以 } 结尾。 中间部分由0个或多个以英文分隔的键/值对组成,键和值之间以英文:分隔。 宾语结构的句子结构如下:
其中,key必须是String类型,并且需要双冒号。 value可以是String、Number、Object、Array等数据类型。例如,一个person对象包含姓名、密码、年龄等信息,JSON表示如下
{
"pname":"张三",
"password":"123456",
"page":40
}
JSON 对象保存在花括号内。
与 JavaScript 一样,对象可以保存多个键/值对
Json 对象和 JavaScript 对象
JavaScript 中的一切都是对象,例如字符串、数字、数组、日期等等。 在 JavaScript 中,对象是具有属性和方法的数据。
我们一般所说的Json对象是Json格式的JavaScript对象或者是符合Json数据结构要求的JavaScript对象。
与 JsonJavaScript
意义
只是一种数据格式
代表一个类的实例
传播
可以跨平台数据传输,速度快
无法传送
表现
1. key必须加双冒号
2、值不能是方法函数,不能是undefined/NaN
1. 不带破折号的按键
2. 值可以是函数、对象、字符串、数字、布尔值等。
互相转换
Json 到 JavaScript:
1.Json.parse(JsonStr); (不兼容IE7)
2.eval("("+JsonStr+")"); (兼容所有浏览器
JavaScript对象转换Json:
杰森。 字符串化(jsObj);
JSON 和 JavaScript 对象之间的转换
Json链表
链表结构以[开头,以]结尾,中间部分由0个或多个以英文分隔的值组成的列表。 链表结构的句子结构如下:
Json链表的元素类型可以不一致。 例如,item1可以是字符串类型,item2可以是数字类型,item3可以是对象类型。 链表的最后一个元素前面不能有冒号。
复杂链表类型
这里我们创建一个包含三个对象的字段。
第一个是一个 HTML 对象,它也是一个包含 5 个元素的链表。 第二个是一个 JavaScript 对象,它也是一个包含 4 个元素的链表。 第三个是Server对象javascript 数组 key,它也是一个包含3个元素的链表。
复杂对象字段的组成
上述两种(对象、数组)数据结构还可以组合形成更复杂的数据结构。
对象包含字段
这里我们创建一个复杂的 siteInfo 对象。
siteInfo对象的siteUrl属性值为shanghai,siteInfo对象的siteAddr属性值为shanghai,siteInfo对象的sitePriority属性值为1,siteInfo对象的siteModule属性值为链表。
siteModule链表有两个元素,第一个元素是HTML,第二个元素是JavaScript。 这两个元素也是链表类型。
字段包含对象
与 JavaScript 中一样,链表可以包含对象:
"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]
在上面的例子中,对象“employees”是一个链表。 包含三个对象。
每个对象都是员工的一条记录(名字和姓氏)。
JSON语法规则
为了统一解析,JSON字符串必须使用双冒号“”,Object键也必须使用双冒号“”。
Json 通配符对
Json数据的写入格式为:名称/值对。 与 JavaScript 对象属性一样。一个名称对应一个值,名称/值对由数组名称(以双冒号表示)组成,写在逗号旁边,后跟值
Json值的数据类型
Json值可以是以下类型:
类型描述
数量(数量)
Json数字类型可以支持整数或浮点类型,但不能使用八位补码和十六位补码格式。 Json 数字类型也不能使用 NaN 和 Infinity。
字符串类型(String)
Json字符串必须写在双冒号之间,并且只能是双冒号。 换行的 Unicode 字符和反斜杠通配符。 Json中没有字符类型,字符类型就是单个字符串。
布尔值
Json布尔值的true或false只能大写。 用双冒号引用值,而不是布尔值。
字段(数组)
[值的有序序列]。
目的
{键:值对的无序集合。 }
无效的
无效的。
Json 和 JavaScriptJSON 使用 JavaScript 语法,但 JSON 格式只是文本。
任何编程语言都可以读取文本并将其作为数据格式传递。
我的朋友Douglas在Yahoo担任了多年的中级架构师,所以他自然喜欢JavaScript。 他设计的Json实际上是JavaScript语法的一个子集,是JavaScript对象的字符串表示。 Json 使用文本来表示 JavaScript 对象的信息,本质上是字符串。
Json 使用 JavaScript 语法
由于 Json 使用 JavaScript 语法,因此不需要额外的软件来在 JavaScript 中处理 Json。
这里我们通过JavaScript创建一个对象字段,并为该对象字段创建一个形式参数。
访问内容
改变数据
更改对象第二个元素的类别:
modules[1].category = "ES6";
Json和JavaScript对象遍历
Json字符串的遍历和Json字符串的遍历都是使用for-in循环来遍历的。
Json遍历
我们创建一个haicoder.html文件并输入以下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Json遍历</title>
<script type="text/javascript">
console.log("嗨客网(www.haicoder.net)");
var str = {"name":"haicoder", "url":"www.haicoder.net"};
for (var k in str) {
console.log(k + " -> " + str[k]);
}
</script>
</head>
<body>
</body>
</html>
首先,我们定义一个Json字符串str。 接下来,我们使用for循环来遍历Json字符串,k是Json字符串中的key,str[k]是Json字符串key对应的值。
用浏览器打开文件,浏览器输出如右图:
JavaScript 对象遍历
我们创建一个haicoder.html文件并输入以下代码:
!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript对象遍历</title>
<script type="text/javascript">
console.log("嗨客网(www.haicoder.net)");
var obj = {name:"haicoder", url:"www.haicoder.net"};
for (var k in obj) {
console.log(k + " -> " + obj[k]);
}
</script>
</head>
<body>
</body>
</html>
首先,我们定义一个 JavaScript 对象 obj。 接下来,我们使用for循环来遍历JavaScript对象,k是JavaScript对象的key,obj[k]是JavaScript对象key对应的值。
Json和JavaScript链表遍历
Json链表的遍历和JavaScript链表的遍历都是使用for-in循环来遍历
Json链表遍历
我们创建一个haicoder.html文件并输入以下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Json数组遍历</title>
<script type="text/javascript">
console.log("嗨客网(www.haicoder.net)");
var jsonArr = [
{"mod":"json", "url":"www.haicoder.net/json"},
{"mod":"vue", "url":"www.haicoder.net/vue"},
{"mod":"python", "url":"www.haicoder.net/python"}
]
for (var k in jsonArr) {
console.log(k + " -> " + jsonArr[k].mod + " -> " + jsonArr[k].url);
}
</script>
</head>
<body>
</body>
</html>
首先,我们定义一个Json链表,这个字段上面的每个元素都是一个对象。 接下来我们使用for循环来遍历Json链表,k是Json链表的下标,jsonArr[k]是Json链表的下标key对应的值。
我们用 。 获取Json链表中每个对象的值。
JavaScript 对象字段遍历
var Js_Result = [
{
name: "haicoder",
url: "www.haicoder.net",
age: 20
},
{
name: "JavaScript",
url: "www.JavaScript.net",
age: 30
}
]
for (var i in Js_Result ){ // i为数组角标
console.log(i+" "+Js_Result[i].firstName
+" "+Js_Result[i].lastName
+" "+Js_Result[i].age);
}
//结果输出为
0 haicoder www.haicoder.net 20
1 JavaScript www.JavaScript.net 30
将JavaScript对象保存到链表Js_Result中,并使用for循环遍历Json_Result,i为链表的角标,通过Js_Result[i].firstName方法获取对应的值。
序列化
将任何 JavaScript 对象转换为 JSON 就是将此对象序列化为 JSON 格式的字符串,以便可以通过网络传递给其他计算机。
我们首先将小明对象序列化为JSON格式的字符串:
为了使输出看起来更好,可以通过缩进添加参数和输出:
JSON.stringify(xiaoming, null, ' ');
结果:
{
"name": "小明",
"age": 14,
"gender": true,
"height": 1.65,
"grade": null,
"middle-school": ""W3C" Middle School",
"skills": [
"JavaScript",
"Java",
"Python",
"Lisp"
]
}
您还可以传入一个函数javascript 数组 key,以便该函数首先处理对象的每个通配符对:
function convert(key, value) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}
JSON.stringify(xiaoming, convert, ' ');
里面的代码让所有属性值变成小写:
{
"name": "小明",
"age": 14,
"gender": true,
"height": 1.65,
"grade": null,
"middle-school": ""W3C" MIDDLE SCHOOL",
"skills": [
"JAVASCRIPT",
"JAVA",
"PYTHON",
"LISP"
]
}
如果我们还想精确控制小明如何序列化,我们可以为小明定义一个 toJSON() 方法,直接返回需要 JSON 序列化的数据:
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '"W3C" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
toJSON: function () {
return { // 只输出name和age,并且改变了key:
'Name': this.name,
'Age': this.age
};
}
};
JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'
反序列化
一般我们从服务器读取JSON数据,并将数据显示在网页上。
收到一个 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
JSON.parse() 还可以接收一个函数来转换解析的属性:
Json的特点 Json方便机器解析和生成,客户端JavaScript可以简单地通过eval()读取Json数据。 Json 本质上是自描述的,易于人们阅读和编写。 Json 采用完全独立于语言的文本格式。 格式均经过压缩,占用带宽更少。 Json解析器和Json库支持许多不同的编程语言,目前几乎所有编程语言都支持Json。 由于Json格式可以被服务器端代码直接使用,大大简化了服务器端和客户端的代码开发量,并且完成的任务不变,易于维护。 Json 比 XML 更小、更快、更容易解析。 Json还规定字符集必须是UTF-8,所以表达多种语言是没有问题的。