JavaWeb开发专题-JSON技术

1.JSON概述

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在这里插入图片描述
Js中的数组和对象?
数组:[1,2,3]
对象:{name:“张三”, age: 20}

复杂数组:[{name:“张三”, age: 20}, {name:“李四”, age: 30}, 1]
复杂对象:{total:50, data: [{name:“张三”, age: 20}, {name:“李四”, age: 30}]}

Json本质:特殊格式的字符串,特殊在字符串的结构,和js中的数组和对象一样一样的!
数组:[1,2,3]
数组格式的json串:"[1,2,3]"
对象:{name: “张”, age: 20}
对象格式的json串:’{name: “张”, age: 20}’
数组中放对象:[{id:“11”,name:“北京”}, {id:“12”,name:“天津”}]
数组中放对象的json格式:’[{id:“11”,name:“北京”}, {id:“12”,name:“天津”}]’

2.为什么需要Json

ajax就是通过js代码,完成和后台数据的交互,但是,往往后台响应的结果的数据格式都比较复杂,例如List、Map等,这些数据js是不能够识别的,因为js和java是不同的语言!因此需要一种通用的数据格式,即一种通用的“语言”!如xml、json,这两个本质还是字符串!任何语言都支持字符串!

json是为了完成前台和后台的复杂数据交换的中间桥梁!

Java:List ===> json ===> 响应给ajax ===> 把json转js对象或数组 ===> 通过DOM技术操作页面元素
在这里插入图片描述在这里插入图片描述

json和js对象的区别:唯一的区别是json是字符串,不可以直接调用字符串的属性来获取json中的“属性”对应的值,如果想获取到json字符串中的属性的值,需要先将json转换为js对象。

后台的List、Map、User、数组等对象可以转换为json格式的字符串,然后使用js将json字符串转换为js对象,然后操作这些数据,最终达到无刷新更新页面中的部分内容。

3.JSON与Js对象之间的相互转换

3.1.JSON转js对象

3.1.1.使用js中的内建函数eval转换

在这里插入图片描述
在这里插入图片描述
eval函数,不仅可以将json格式的字符串,转换为js对象,还可以用于一些计算,和js代码的动态拼接
在这里插入图片描述
由于eval函数可以解析js代码,并执行,因此存在风险。

3.1.2.使用JSON对象将json字符串转换成js对象

var txt = “[1,23]”;
var arr = JSON.parse(txt); // 将json串转换为js对象
var txt = JSON.stringify(arr); // 将js对象转换为json串,调试的时候,方便查看对象的结构

JSON对象:浏览器自带的一个js对象,对象中有一些方法可供使用
在这里插入图片描述

使用JSON对象中的parse方法可以将json字符串转换成js对象,但是JSON对象对json字符串的格式要求比较严格:key值一定要使用双引号引起来,字符串类型的值也必须要使用双引号

但是,IE9以下不支持JSON对象,需要引入json2.js,使JSON对象能够正常使用:

<!-- 只有ie浏览器才能够识别下面的html判断 html hack-->
<!--[if lt IE 9]>
	<script type="text/javascript" src="js/json2.js"></script>
<![endif]-->
<script type="text/javascript">
	var txt = '{ "employees" : [' +
	'{ "firstName":"Bill" , "lastName":"Gates" },' +
	'{ "firstName":"George" , "lastName":"Bush" },' +
	'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';
	var obj = JSON.parse(txt);
	alert(obj.employees[0].firstName);
</script>

json字符串==>js对象:JSON.parse(“json串”)
js对象 ===> json字符串:JSON.stringify(js对象);

3.2.js对象转JSON

有时我们需要查看对象的结构!一般采用的方式是alert(obj),但是只能看到下图所示的样子:
在这里插入图片描述
将js对象转换成json字符串的方法JSON.stringify(obj),方便查看对象的结构!
在这里插入图片描述

4.JSON与Java对象之间的相互转换

  • 导入解析JSON的工具包
    在这里插入图片描述
    在这里插入图片描述
  • 代码示例:
public static void main(String[] args) {
	Gson gson = new Gson();
	User user = new User("脏三", 20);
	List<User> uList = new ArrayList<User>();
	uList.add(new User("李四", 21));
	uList.add(new User("王五", 22));
	Map<String, Object> uMap = new HashMap<String, Object>();
	uMap.put("aa", 11);
	uMap.put("bb", 22);
	
	// java对象转json
	String json1 = gson.toJson(user);
	String json2 = gson.toJson(uList);
	String json3 = gson.toJson(uMap);
	/*System.out.println(json1); {name:"张三", age:20}
	System.out.println(json2); [{name:"张三", age:20},{name:"张三", age:20} ]
	System.out.println(json3);  {aa:11,bb:22}*/
	
	// json转java对象
	// json转对象
	User user1 = gson.fromJson(json1, User.class);
	// json转集合
	Type type = new TypeToken<List<User>>(){}.getType();
	List<User> uuList = gson.fromJson(json2, type);
	// json转map
	Type type2 = new TypeToken<Map<String, Object>>(){}.getType();
	Map<String, Object> map2 = gson.fromJson(json3, type2);
	System.out.println(user1);
	System.out.println(uuList);
	System.out.println(map2);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

釣餌锒鐺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值