JSON详解

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服务器或存储到文件时非常有用。

java 复制代码
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服务器接收数据或从文件读取数据时非常有用。

java 复制代码
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对象 :

html 复制代码
<!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() 就可以忽略上述两点需要注意的地方

html 复制代码
<!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

html 复制代码
<!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

html 复制代码
<!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数组对象
相关推荐
桂月二二42 分钟前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
hunter2062062 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb2 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角2 小时前
CSS 颜色
前端·css
浪浪山小白兔3 小时前
HTML5 新表单属性详解
前端·html·html5
lee5764 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm
2401_897579654 小时前
AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
前端·人工智能·flutter
limit for me4 小时前
react上增加错误边界 当存在错误时 不会显示白屏
前端·react.js·前端框架
浏览器爱好者4 小时前
如何构建一个简单的React应用?
前端·react.js·前端框架
qq_392794484 小时前
前端缓存策略:强缓存与协商缓存深度剖析
前端·缓存