Json
json是一种轻量级的数据交换格式。json采用完全独立于语言的文本格式
json 是由键值对组成,并且由大括号包围。每个键由引号引起来,键和值之间使用冒号进行分隔, 多组键值对之间进行逗号进行分隔
json 的两个常用方法
json 的存在有两种形式
json 对象:对象的形式存在
var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定义对象格式json
console.log(jsonObject.k1); //取出键k1对应的值
json 字符串:字符串的形式存在
var jsonArray = ["元素1","元素2","元素3"]; //定义数组格式json
console.log(jsonArray[0]); //访问json数组的元素
for(var i = 0 ; i < jsonArray.length ; i++){
console.log(jsonArray[i]); //遍历数组,访问每个元素
}
JSON.stringify() 把 json 对象转换成为 json 字符串
JSON.parse() 把 json 字符串转换成为 json 对象
一般我们要操作 json 中的数据的时候,需要 json 对象的格式。
一般我们要在客户端和服务器之间进行数据交换的时候,使用 json 字符串。
// 把 json 对象转换成为 json 字符串
var jsonObjString = JSON.stringify(jsonObj);
alert(jsonObjString)
// 把 json 字符串。转换成为 json 对象
var jsonObj2 = JSON.parse(jsonObjString);
alert(jsonObj2.key1);// 12
alert(jsonObj2.key2);// abc
JSON 在 java 中的使用
使用gson jar包转换
//javaBean 和 json 的互转
@Test
public void test1(){
Person person = new Person("h", null, null, null);
Gson gson = new Gson();
//toJson方法把java对象转换成json字符串
String s = gson.toJson(person);
System.out.println(s);
//fromJson把json字符串转换为java对象
Person person1 = gson.fromJson(s, Person.class);
System.out.println(person1);
}
list/map的类型转换json
public class personListType extends TypeToken<ArrayList<Person>> {
}
//list和json的转换
public void test2(){
List<Person> plist=new ArrayList<>();
plist.add(new Person("h", null, null, null));
plist.add(new Person("h2", null, null, null));
Gson gson=new Gson();
String s = gson.toJson(plist);
System.out.println(s);
List<Person> plist2=gson.fromJson(s,List.class);
System.out.println(plist2);
Person p1=plist2.get(0);
System.out.println(p1);
}
//map和json的转换
public void test3(){
Map<Integer,Person> map=new HashMap();
map.put(1, new Person("h", null, null, null));
map.put(2, new Person("h2", null, null, null));
map.put(3, new Person("h3", null, null, null));
Gson gson=new Gson();
String s = gson.toJson(map);
System.out.println(s);
Map<Integer,Person> map1= gson.fromJson(s, new personListType().getType());
//法二 使用匿名内部类 推荐
//Map<Integer,Person> map1= gson.fromJson(s,
new TypeToken<Map<Integer,Person>>(){}.getType());
System.out.println(map1);
}
注:list/map的类型转换需要用到TypeToken反射类 一般使用匿名内部类 将其封装
Ajax请求
ajax是指一种创建交互式网页应用的网页开发技术。 ajax 是一种浏览器通过 js 异步发起请求,局部更新页面的技术
//原生ajax请求 不使用
function ajaxRequest() {
//1、我们首先要创建XMLHttpRequest
var xmlHttprequest = new XMLHttpRequest();
//2、调用open方法设置请求参数 规定请求的类型、url以及是否是异步处理请求
xmlHttprequest.open("get","http://localhost:8080/Testjsp/ajaxServlet?action=jsAjax",true);
//4、在send方法前绑定onreadystatechange事件,处理请求完成后的操作。
xmlHttprequest.onreadystatechange=function (){
if(xmlHttprequest.readyState == 4 && xmlHttprequest.status==200){
//转换json字符串为json对象 调出需要的字段
var parseobj = JSON.parse(xmlHttprequest.responseText);
//把响应的数据显示在页面上
document.getElementById("div01").innerText="姓名:"+parseobj.name;
}
}
//3、调用send方法发送请求
xmlHttprequest.send()
}
XMLHttpRequest 对象的responseText/responseXml 可获取来自服务器的响应
onreadystatechange事件
属性readystate有XMLHttpRequest 的状态信息
存有XMLHttpRequest的状态。从0到4发生变化
- 0: 请求未初始化
- 1:服务器连接已建立
- 2:请求已接收
- 3:请求处理中
- 4:请求已完成,且响应已就绪
注:Ajax 请求的局部更新,浏览器地址栏不会发生变化 局部更新不会舍弃原来页面的内容
jQuery 中的 AJAX 请求 使用
$.ajax 方法
url 表示请求的地址
type 表示请求的类型 GET 或 POST 请求
data 表示发送给服务器的数据
格式有两种:
一:name=value&name=value
二:{key:value}
success 请求成功,响应的回调函数
dataType 响应的数据类型
常用的数据类型有:
text 表示纯文本
xml 表示 xml 数据
json 表示 json 对象
//ajax请求
$("#ajaxBtn").click(function(){
$.ajax({
url:"http://localhost:8080/Testjsp/ajaxServlet",
data:"action=jqueryAjax",
type:"get",
success:function (data){//传入参数 可以直接调用数据 不用在responseText中提取
// var parse = JSON.parse(data);
$("#msg").html("编号:"+data.id+"姓名:"+data.name)
},
dataType:"json" //用json类型不用再转一次json对象
});
});
$.get 方法和$.post 方法
url 请求的 url 地址
data 发送的数据
callback 成功的回调函数
type 返回的数据类型
// ajax--get请求/post请求同理
$("#getBtn").click(function(){
$.get("http://localhost:8080/Testjsp/ajaxServlet",
"action=jqueryGet",
function (data){
$("#msg").html("get编号:"+data.id+"姓名:"+data.name)
}, "json"
);
});
$.getJSON 方法
url 请求的 url 地址
data 发送给服eee务器的数据
callback 成功的回调函数
// ajax--getJson请求
$("#getJSONBtn").click(function(){
// 调用
$.getJSON("http://localhost:8080/Testjsp/ajaxServlet",
"action=jqueryGetJSON",
function (data){
$("#msg").html("jqueryGetJSON编号:"+data.id+"姓名:"+data.name)
}
);
});
表单序列化 serialize() 重要
serialize()可以把表单中所有表单项的内容都获取到,并以name=value&name=value 的形式进行拼接。
// 把参数序列化
// $("#form01").serialize() 整个表单的数据
$.getJSON("http://localhost:8080/Testjsp/ajaxServlet",
"action=jquerySerialize&"+$("#form01").serialize(),
function (data){
$("#msg").html("serialize编号:"+data.id+"姓名:"+data.name)
}
);
注:response.getWriter().write()和 response.getWriter().print()的区别
response.getWriter()返回的是PrintWriter,这是一个打印输出流
response.getWriter().write()和 response.getWriter().print()是响应给客户端的东西,如果不用ajax接收将数据放在合适的位置,就会在浏览器上生成一个新的页面来显示内容。
print
response.getWriter().print(),不仅可以打印输出文本格式的(包括html标签),还可以将一个对象以默认的编码方式转换为二进制字节输出
writer
response.getWriter().writer(),只能打印输出文本格式的(包括html标签),不可以打印对象