Json
json是一种轻量级的数据交换格式。json采用完全独立于语言的文本格式
json 是由键值对组成,并且由大括号包围。每个键由引号引起来,键和值之间使用冒号进行分隔, 多组键值对之间进行逗号进行分隔
json 的两个常用方法
json 的存在有两种形式
json 对象:对象的形式存在
var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定义对象格式jsonconsole.log(jsonObject.k1); //取出键k1对应的值
json 字符串:字符串的形式存在
var jsonArray = ["元素1","元素2","元素3"]; //定义数组格式jsonconsole.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);// 12alert(jsonObj2.key2);// abc
JSON 在 java 中的使用
使用gson jar包转换
//javaBean 和 json 的互转@Testpublic 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、我们首先要创建XMLHttpRequestvar 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标签),不可以打印对象
