JSON总结

一.什么是JSON?

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

二.历史发展

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。

JSON是Douglas Crockford在2001年开始推广使用的数据格式,在2005年-2006年正式成为主流的数据格式,雅虎和谷歌就在那时候开始广泛地使用JSON格式。

三.JSON与XML

1.JSON与 XML 相同之处

  • JSON 是纯文本
  • JSON 具有"自我描述性"(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

2.JSON与 XML 不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

四.为什么要用JSON

对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

使用 XML

        读取 XML 文档

        使用 XML DOM 来循环遍历文档

        读取值并存储在变量中

使用 JSON

        读取 JSON 字符串

        用 eval() 处理 JSON 字符串

五.常用类型

任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

六.校验工具

1.前言

JSON格式取代了xml给网络传输带来了很大的便利,但是却没有了xml的一目了然,尤其是json数据很长的时候,我们会陷入繁琐复杂的数据节点查找中。

但是国人的一款在线工具 BeJson 、SoJson在线工具让众多程序员、新接触JSON格式的程序员更快的了解JSON的结构,更快的精确定位JSON格式错误。

2.功能

JSON格式化校验

JSON视图

压缩转义

JSON在线编辑器

在线发送JSON数据

JSON着色

JSON-XML互转

JSON-VIEW

它和xml一样都是一种数据交换格式

七.JSON的最小化

Eclipse RAP的一个提交者也是领导者的Ralf Sternberg,他只用了十个类就把快速的和轻量级的库整合到了一起。显然,使用精益和解析法真正地改善了服务器的性能,因为服务器进程以更高的效率为大量的客户创建了JSON信息。在外部JSON中不存在依赖关系,代码很容易管理,而且也不会占用很多内存。对于你的全部JSON项目来说,这还远远不够,但这确实带来了几件好事。

八.JSON数据的组成

1.JSON 语法规则

  • 数据为 键/值 对。
  • 数据由逗号分隔。
  • 大括号保存对象
  • 方括号保存数组

2. JSON 数据 - 一个名称对应一个值

键/值对包括字段名称(在双引号中),后面一个冒号,然后是值:

"name":"Runoob"

3.JSON 对象

“{}”--json对象

“{}”包含---名称/值对【键值对】/ json数组 / json对象

JSON 名称/值对【键值对】中的键,使用双引号包围

JSON 名称/值对【键值对】中的值:

1.数字(整数或浮点数) "age":30

2.字符串(在双引号中)”name”:”zhangsan”

3.逻辑值(true 或 false)"flag":true

4.数组(在中括号中)”array”:[]

5.对象(在大括号中)”obj”:{}

6.null     "runoob":null

var student = {
					"stuid": 1001,
					"stuname": "zhangsan",
					"stusex": true,
					"stuaddress": ["西安", "北京"],
					"classinfo": {
						"classid": "20210325",
						"classname": "前端班"
					}
				};

这是一个JSON对象。

 4.json数组

“[]”--json数组

“[]”包含---具体数据值/json对象

var address = [{
	"type": "家庭地址",
	"info": "西安高新一路"
},
	{
	"type": "工作地址",
	"info": "西安丈八四路"
	},
];

这是一个JSON数组。

5.json字符串

var studentinfo = "{\"stuid\":1001," +
					"\"stuname\":\"zhangsan\"," +
					"\"stusex\":true," +
					"\"stuaddress\":[\"西安\",\"北京\"]," +
					"\"classinfo\":{\"classid\":\"20210325\"," +
					"\"classname\":\"前端班\"}}";

九.JSON数据的转换

我们得到的json数据有可能是json对象,也有可能是json字符串。因此我们就需要将json对象与json字符串进行转换。

1.json对象转换成json字符串

可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>json</title>
		<script type="text/javascript">
			window.onload = function() {
				//对象
				var student = {
					"stuid": 1001,
					"stuname": "zhangsan",
					"stusex": true,
					"stuaddress": ["西安", "北京"],
					"classinfo": {
						"classid": "20210325",
						"classname": "前端班"
					}
				};
				//改成字符串
				var shao=JSON.stringify(student);
				alert(shao);//返回的是字符串
			}
		</script>
	</head>
	<body>
	</body>
</html>

 

2.json字符串转换为json对象

<1.>使用 JSON.parse() 方法将数据转换为 JavaScript 对象。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>json</title>
		<script>
			window.onload=function(){
				var studentinfo="{\"stuid\":1001,"+
								"\"stuname\":\"zhangsan\","+
								"\"stusex\":true,"+
								"\"stuaddress\":[\"西安\",\"北京\"],"+
								"\"classinfo\":{\"classid\":\"20210325\","+
								"\"classname\":\"前端班\"}}";
				alert(studentinfo);//字符串 	
				//json字符串转换成Json对象
				//1.使用 JSON.parse() 方法将数据转换为 JavaScript 对象。
				var jsonobj=JSON.parse(studentinfo);
				//2.eval("("+字符串+")")
				//var jsonobj=eval("("+studentinfo+")");
				alert(jsonobj);
			}
		</script>
	</head>
	<body>
	</body>
</html>

<2.>eval("("+str+")");

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>json</title>
		<script>
			window.onload=function(){
				var studentinfo="{\"stuid\":1001,"+
								"\"stuname\":\"zhangsan\","+
								"\"stusex\":true,"+
								"\"stuaddress\":[\"西安\",\"北京\"],"+
								"\"classinfo\":{\"classid\":\"20210325\","+
								"\"classname\":\"前端班\"}}";
				alert(studentinfo);//字符串 	
				//json字符串转换成Json对象
				//1.使用 JSON.parse() 方法将数据转换为 JavaScript 对象。
				//var jsonobj=JSON.parse(studentinfo);
				//2.eval("("+字符串+")")
				var jsonobj=eval("("+studentinfo+")");
				alert(jsonobj);
			}
		</script>
	</head>
	<body>
	</body>
</html>

两个运行的结果都为:[object Object]

3.JSON数据的解析

字符串:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>json</title>
		<script>
			window.onload=function(){
				var studentinfo="{\"stuid\":1001,"+
								"\"stuname\":\"zhangsan\","+
								"\"stusex\":true,"+
								"\"stuaddress\":[{\"type\":\"家庭地址\",\"info\":\"西安高新一路\"},"+
								"{\"type\":\"工作地址\",\"info\":\"西安丈八四路\"}],"+//数组
								"\"classinfo\":{\"classid\":\"20210325\","+
								"\"classname\":\"前端班\"}}";//对象
				//studentinfo字符串
				//字符串转换成json对象
				var jsonobj=JSON.parse(studentinfo);
				document.write("<h1>学生编号:"+jsonobj.stuid+"</h1>");
				document.write("<h1>学生姓名:"+jsonobj.stuname+"</h1>");
				//判断为true是为男,为false是为女
				if(jsonobj.stusex){
					document.write("<h1>学生性别:男</h1>");
				}else{
					document.write("<h1>学生性别:女</h1>");
				}
				//数组
				var addressArray=jsonobj.stuaddress;
				//循环输出数组
				for(var i=0;i<addressArray.length;i++){
					document.write("<h1>"+addressArray[i].type+":"+addressArray[i].info+"</h1>");
				}
				//对象
				document.write("<h1>班级编号:"+jsonobj.classinfo.classid+"</h1>");
				document.write("<h1>班级名称:"+jsonobj.classinfo.classname+"</h1>");
				}
		</script>
	</head>
	<body>
	</body>
</html>

对象:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>json</title>
		<script>
			window.onload=function(){
				var student={
					"stuid":1001,
					"stuname":"zhangsan",
					"stusex":false,
					"stuaddress":["西安","北京"],
					"classinfo":{"classid":"20210325","classname":"前端班"}
				};
				//student是一个json对象,不用转换
				document.write("<h1>学生编号:"+student.stuid+"</h1>");
				document.write("<h1>学生姓名:"+student.stuname+"</h1>");
				//判断为true是为男,为false是为女
				if(student.stusex){
					document.write("<h1>学生性别:男</h1>");
				}else{
					document.write("<h1>学生性别:女</h1>");
				}
				//数组
				var addressArray=student.stuaddress;
				var addressstr="";
				//循环输出数组
				for(var i=0;i<addressArray.length;i++){
					addressstr=addressstr+addressArray[i]+",";
				}
				//数组拼接完成后多一个“,”,要去掉最后这个“,”。
				addressstr=addressstr.substring(0,addressstr.lastIndexOf(","));
				document.write("<h1>学生地址:"+addressstr+"</h1>");
				//对象
				document.write("<h1>班级编号:"+student.classinfo.classid+"</h1>");
				document.write("<h1>班级名称:"+student.classinfo.classname+"</h1>");
				}
		</script>
	</head>
	<body>
	</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值