JSON
可以再JS中,把数据组成一个json格式的字符串。作为参数传递给服务器。例如:proid={"id",1}
服务器在servlet中,可以使用String json = request.getParameter("proid");接收数据,再使用jackson把json转为对象使用。
《百度百科》
JSON (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
0- 回顾:JavaScript中得到object类型对象方式有哪几种?
方式1: 由构造函数生成的对象都是object类型对象;
方式2: 由JSON数据描述格式生成对象都是object类型对象;
1- JSON
1)概述
1. JSON是一种服务端 与 浏览器间的数据交换格式。
2. 在JavaScript中。由JSON数据描述格式生成对象都是object类型对象。
// JSON的标准命令格式 var obj = { "属性名1":值, "属性名2" : 值};
3. 开发者通常将由JSON生成的object类型对象称为JSON对象。
4.专门存放JSON对象的数组被称为 JSON数组。
2)JSON的分类?
任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。
1. JSON对象 —— JSONObject 。
对象在 JS 中是使用花括号 {} 包裹起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。
{ name:"河北", jiancheng:"冀","shenghui":"石家庄"}
JSON源自JavaScript,JavaScript中只能使用string类型作为key。
2. JSON数组 —— JSONArray。
[{ name:"河北", jiancheng:"冀","shenghui":"石家庄"} , { name:"山西", jiancheng:"晋","shenghui":"太原"} ]
3)使用JSON的优势?
1. json格式好理解
2. json格式数据在多种语言中,比较容易处理。 使用java, javascript读写json格式的数据比较容易。
3. json格式数据他占用的空间下,在网络中传输快, 用户的体验好。
4)常用处理JSON的工具库?
1)gson (google)
2)fastjson(阿里)
3)jackson
4)json-lib
2- JSON的使用
1)如何理解 “JSON是服务端与浏览器之间的数据通信格式”这句话?
回顾javase基础知识:
String str = ""; //这种方式是基本数据类型。 (值传递) String str = new String(); //这种方式是高级引用数据类型(引用地址传递)
JSON本身是在JavaScript中对于Object类型声明所提供的一种简化声明方式。
在联合使用过程中,要想把服务端中的一个高级引用类型的数据内容传递到浏览器中的JavaScript变量时,此时需要将该高级引用数据内容转换成JSON格式的字符串再进行传递。(因为高级引用类型数据传递时,传递的是对象的内存地址。这对JavaScript而言无意义。)
通常情况下,开发者会使用反射机制来实现该功能。—— 参考案例1
但在实际开发中,通常引入已经编写好的JSON工具jar包
直接使用即可。—— 参考案例2
其实JSON工具包中的代码也是利用反射机制实现了将任意的对象 封装成JSON格式的字符串
或JSON数组格式的字符串。将经过转换之后得到的JSON格式的字符串数据,放入request域中,然后请求跳转交由指定的jsp。
jsp在运行的过程中,通过EL表达式取出域中的数据,交给JavaScript变量。由此完成了Java与JavaScript之间的通信。
因此我们说,JSON是服务端与浏览器之间的数据通信格式。
ajax发起请求-------servlet(返回的一个json格式的字符串 { name:"河北", jiancheng:"冀","shenghui":"石家庄"})
2)Java中Obejct对象 转换成 JSON格式的字符串?
普通对象 转成JSON格式 —— 使用JSONObject.fromObject(Object obj); 返回值是JSONObject类型
集合对象 转成JSON数组格式:—— 使用JSONArray.fromObject(Object obj); 返回值是JSONArray类型
3-JSON 与 JS 对象的关系
1)JSON 和 JS 对象之间进行互转?
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
2)将JSON类型的字符串 转为 JSON 对象?
在js中的,可以把json格式的字符串,转为json对象。json中的key,就是json对象的属性名。
// 使用JavaScript变量接收来自服务端的数据 (此处获取到的是个JSON格式的字符串数据)
var data = xmlHttpRequest.responseText;
// eval()是JavaScript中的函数。 eval是执行括号中的代码,把json格式字符串转成json对象。 var jsonobj = eval("("+data+")");
// 获取json对象的属性值,更新对应的dom对象
4.1-案例:利用反射机制,手动实现将Object对象转成JSON格式的字符串 或 JSON格式的数组形式。
背景:
服务端处理之后得到的高级引用类型数据 若想传递到浏览器,则浏览器JavaScript对象只能接收到该对象的内存地址(无含义),不能读取到该对象的属性以及对应的属性值。
解决方案(思路):
本质就是利用反射机制,将服务端的高级引用类型对象的属性 和 值取出,按照JSON格式拼接成该对象的JSON格式的字符串形式 或JSON数组格式的字符串。
注意事项:
类文件中的private修饰的私有属性,表示该属性只能在该类的内部使用。不能类文件的外面使用。
页面标签加载完毕之后,再执行
4.2-案例:借助JSON工具包,将Java对象转换成符合JSON格式的字符串或JSON格式的数组。
JSON工具包里面封装的是反射工具类,利用反射工具类将Java对象转换成符合JSON格式的字符串
5-JSON数据格式 与 XML数据格式的比较
<?xml version="1.0" encoding="utf-8"?> <country> <name>中国</name> <province> <name>黑龙江</name> <cities> <city>哈尔滨</city> <city>大庆</city> </cities> </province> <province> <name>广东</name> <cities> <city>广州</city> <city>深圳</city> <city>珠海</city> </cities> </province> <province> <name>台湾</name> <cities> <city>台北</city> <city>高雄</city> </cities> </province> <province> <name>新疆</name> <cities> <city>乌鲁木齐</city> </cities> </province> </country>
{ "name": "中国", "province": [{ "name": "黑龙江", "cities": { "city": ["哈尔滨", "大庆"] } }, { "name": "广东", "cities": { "city": ["广州", "深圳", "珠海"] } }, { "name": "台湾", "cities": { "city": ["台北", "高雄"] } }, { "name": "新疆", "cities": { "city": ["乌鲁木齐"] } }] }
可以看到,JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用的带宽。