一、什么是JSON
JSON:javascript对象表示法(JavaScript Object Notation)。
JSON是轻量级的文本数据交换格式。
JSON独立于语言。(JSON使用javascript语法来描述数据对象,但是JSON仍然独立于语言和平台。JSON解析器和JSON库智齿许多不同的编程语言)
JSON具有自我描述性,更易理解。
JSON比XML更小、更快、更易解析。
二、JSON转换为javascript对象
JSON文本格式在语法上与创建的javascript对象的代码相同。
由于这种特性,无需解析器,javascript程序能够使用内建的eval()函数,,用JSON来生成原升javascript对象。
- eval()函数:可计算某个字符串,并执行其中的javascript代码
三、JSON特点
类似XML
- JSON是纯文本
- JSON具有自我描述性(人类可读)
- JSON具有层级结构(值中存在值)
- JSON可通过javascript进行解析
- JSON数据可使用AJAX进行传输
相比XML的不同之处
- 没有结束标签
- 更短
- 读写的速度更快
- 能够使用内建的javascript eval()方法进行解析
- 使用数组
- 不使用保留字
四、为什么使用JSON
对于使用AJAX应用程序来说,JSON比XML更快更易使用:
使用XML
- 读取XML文档
- 使用XML DOM来循环遍历文档
- 读取值并存储在变量中
使用JSON
- 读取JSON字符串
- 用eval()处理JSON字符串
五、JSON语法
JSON语法是javascript语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON名称/值对
JSON数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"firstName" : "John"
JSON值
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true或false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
JSON对象
JSON对象在花括号中书写:
对象可以包含多个名称/值对:
{ "firstName":"John" , "lastName":"Doe" }
JSON对象的两个方法:stringify()和parse()。这两个方法分别用于把javascript对象序列化为JSON字符串和把JSON字符串解析为原生javascript值。
- stringify()
var book = {
title:"Professional",
authors:["Nicholas C. Zakas"],
edition:3,
year:2011
};
var jsonText = JSON.stringify(book);
这个例子使用JSON.stringify()把一个javascript对象序列化为一个JSON字符串,然后将它保存在变量jsonText中。默认情况下,JSON.stringify()输出的JSON字符串不包含任何空格字符或缩进,因此保存在jsonText中的字符串为:
{"title":"Professional","authors":["Nicholas C. Zakas"],"edition":3,"year":2011}
在序列化javascript对象时,所有函数及原型成员都会被有意忽略,不体现在结果中。此外,值为undefined的任何属性也都会被跳过。结果中最终都是值为有效JSON数据类型的实例属性。
- prase()
var bookCopy = JSON.parse(jsonText);
如果传给JSON.prase()的字符串不是有效的JSON,该方法会抛出错误
JSON数组
JSON数组在方括号中书写
数组可以包含多个对象:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
在上面的代码中,对象"employees"是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录
JSON使用javascript语法
因为JSON使用javascript语法,所以无需额外的软件就能处理javascript中的JSON
例子
var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];
可以像这样访问javascript对象数组中的第一项
employees[0].lastName;
JSON文件
- JSON文件的类型是“.json”
- JSON文本的MIME类型是“application/json”
六、JSON使用
把JSON文本转换为javascript对象
JSON最常见的用法之一,是从web服务器上读取JSON数据(作为文件或作为HttpRequest),将JSON数据转换为javascript对象,然后在网页中使用该数据。
for in遍历JSON
获取对象属性的语法:
- 1.obj.attr
- 2.obj["attr"]
for in遍历JSON的时候
- 1.for(attr in JSON)中的attr是获取到的JSON中属性的名字,是个字符串
- 2.json[attr]获取到的是属性的值,该属性的值的数据类型,与JSON中该属性的值的数据类型一致。
var json = {
"lrc1":{"time": "00:53.68", "lrc": "一起醉一回"},
"lrc2":{"time": "00:56.68", "lrc": "男人为什么不回家"},
"lrc3":{"time": "00:58.86","lrc": "只因家里那个她"},
"lrc4":{"time": "01:01.19", "lrc": "独自一人闯天涯"},
"lrc5":{"time": "01:03.33", "lrc": "天不怕地不怕"},
"lrc6":{"time": "01:05.65","lrc": "男人他一肩挑霜华"},
"lrc7":{"time": "01:07.84", "lrc": "只因压力如山大"},
"lrc8":{"time": "01:10.22", "lrc": "你负责贤惠美如花"},
"lrc9":{"time": "01:12.38","lrc": "我就负责赚钱养家"}
}
for(attr in json){
var obj = json1[attr];
document.write(obj.time + " " + obj.lrc + "<br>")
}