JSON详解

48 篇文章 0 订阅

JSON详解

一、简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类读写,也易于机器解析和生成。JSON 基于 JavaScript 语言的一个子集,但独立于编程语言,可以被多种语言解析和生成,包括 Java、Python、C++ 等。

现在传输数据的方式更多是采用json的格式,渐渐代替了XML

理解:JSON是一种表示对象的方式,用来传输数据的一种格式。

二、JSON的数据表示

JSON 使用名值对(key-value pairs)的方式来表示数据。每个名值对由一个键和一个对应的值组成,键和值之间使用冒号 : 分隔,多个名值对之间使用逗号 , 分隔。名值对通常用于对象中,使用花括号 {} 包围。

符号描述示例
{}表示对象{name : ‘小雷’ , age:23}
[{},{},{}]表示对象数组[ {name : ‘小雷’ , age:23} , {name : ‘小杨’ , age:22} ]

注意:

  1. JSON的本质就是一串字符串,只不过元素(数据)会使用特定的符号标注
  2. 键和值之间用 “ :” 隔开
  3. 键值对之间用 “ ,” 隔开
  4. 支持无限层嵌套
  5. 单引号’'和双引号""都可以表示字符串。

三、序列化和反序列化

JSON的序列化和反序列化是将对象和JSON字符串相互转换的过程。序列化是将对象转换为JSON字符串,反序列化是将JSON字符串转换为对象。

1、序列化

序列化(Serialization)是将对象转换为JSON字符串的过程。这在需要将数据传输到Web服务器或存储到文件时非常有用。

var obj = { name: "John", age: 30, city: "New York" };
var jsonString = JSON.stringify(obj);
console.log(jsonString); // {"name":"John","age":30,"city":"New York"}

2、反序列化

反序列化(Deserialization)是将JSON字符串转换回对象的过程。这在从Web服务器接收数据或从文件读取数据时非常有用。

var jsonString = '{"name":"John","age":30,"city":"New York"}';
var obj = JSON.parse(jsonString);
console.log(obj.name); // John

理解:

  • 序列化 将对象转换为 JSON 字符串,适用于数据传输和存储。
  • 反序列化 将 JSON 字符串转换为对象,适用于从数据源读取数据。

四、浏览器中处理JSON

1 、JSON字符串 → 对象

1.1 使用JSON.parse()函数将JSON格式字符串解析为JavaScript对象 :

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
		//json格式的字符串
		//坑:使用parse解析json格式的字符串,该字符串必须使用单引号包裹着双引号	
		var jsonStr = '{"name":"你好啊,小雷","age":23}';
		//将json格式的字符串转换为js对象
		var jsObj = JSON.parse(jsonStr);
		alert(jsObj.name + "--"+jsObj.age);
		</script>
	</body>
</html>

注意:(有坑)

1. 字符串的数据格式:所有属性必须用双引号引住,因为使用JSON.parse需严格遵守JSON规范。
2. 单引号与双引号 :使用单引号嵌套双引号的方式  ' '{"name":"你好啊,小雷","age":23}';

1.2 使用JSON.eval()函数将JSON格式字符串解析为JavaScript对象

原因:使用JSON.parse()来解析JSON字符串,需要注意的是被转化的字符串里面的属性要使用引号,并且总体是单引号套双引号的方式,太麻烦了。 如果使用eval() 就可以忽略上述两点需要注意的地方

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
		//json格式的字符串
		//坑:eval去解析json格式的字符串,必须使用小括号括起来,	
		var jsonStr ="[{'name':'你好啊,小雷','age':23},{'name':'你好啊,小杨','age':22}]" ;
		//将json格式的字符串转换为js数组
		var jsArr = eval(jsonStr);
		for(var i=0;i<jsArr.length;i++){
			var jsObj = jsArr[i];
			alert(jsObj.name + "--"+jsObj.age);
		}
		</script>
	</body>
</html>

理解:eval(str)会将函数的参数作为JavaScript代码去执行

注意:(还是有坑)

使用()包裹JSON字符串

“[{‘name’:‘你好啊,小雷’,‘age’:23},{‘name’:‘你好啊,小杨’,‘age’:22}]”

原因:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的。在JavaScript中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式转化为对象,而不是作为代码来执行。

2、对象 → JSON字符串

2.1 js对象转JSON

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
		//js对象
		var love1 = new Object();
		love1.name = "你好啊,小雷"
		love1.age = 23;
		var love2 = new Object();
		love2.name = "你好啊,小杨"
		love2.age = 23;
		//js数组
		var jsArr = [love1,love2];
		//将js数组转json格式的字符串
		var jsonStr = JSON.stringify(jsArr);
		alert(jsonStr);
		</script>
	</body>
</html>

2.2 JS数组转JSON

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
		//js对象
		var book = new Object();
		book.name = "你好啊,小雷";
		book.age = 23;
		//将js对象转json格式的字符串
		var jsonStr = JSON.stringify(book);
		alert(jsonStr);
		</script>
	</body>
</html>

五、FastJSON

1、定义:FastJson:阿里的开源框架,被不少企业使用,是一个极其优秀的Json框架,使用此框架必须在项目中导入框架包(fastjson-1.1.33.jar), 它提供了快速的 JSON 序列化和反序列化功能。

2、特点:

  1. 高性能:FastJSON 在序列化和反序列化 JSON 数据时速度非常快,通常比其他 JSON 库更快。
  2. 简单易用:API 设计简洁,使用方便。
  3. 支持多种数据格式:支持 JSON 对象、数组、Map、List 等常见数据结构。
  4. 强大的功能:包括 JSONPath、自动类型识别、循环引用检测等。

3、FastJson对于json格式字符串的解析主要用到了下面三个类:

  1. JSON:FastJSON的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换
  2. JSONObject:FastJSON提供的json对象
  3. JSONArray:FastJSON提供json数组对象

强大的功能:包括 JSONPath、自动类型识别、循环引用检测等。

3、FastJson对于json格式字符串的解析主要用到了下面三个类:

  1. JSON:FastJSON的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换
  2. JSONObject:FastJSON提供的json对象
  3. JSONArray:FastJSON提供json数组对象
  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值