版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaWEB开发实战Ajax异步数据交互AjaxAjax(AsynchronousJavaScriptandXML,异步JavaScript和XML)并不是一项新的技术,它产生的主要目的是用于页面的局部刷新,利用这样的技术可以有效的提升页面的响应速度。Ajax技术的最早使用者是Google(谷歌),例如,GoogleMaps就大量地应用了Ajax技术。随后的Yahoo(雅虎)、Amazon(亚马逊)也陆续开始应用此技术,而到了现在几乎所有的互联网项目中都存在有Ajax技术应用,其不仅是前端开发人员必备的技能,也是后端架构人员的必备技能。WEB页面展示在传统的WEB项目开发中,只要用户发出了请求,那么就会根据用户的请求进行相应的数据库查询,最终形成完整的显示页面,如果说现在有一个页面的查询需要同时涉及到五张数据表的处理,那么所生成的页面时间也会相应的增加。Ajax局部更新当一个页面显示完成之后,那么肯定会需要进行页面的操作,那么就有可能需要进行指定部分的数据更新,传统的做法采用的是重新加载整个页面的形式完成的,而如果使用的是Ajax则只会进行部分内容的更新,很明显这样部分更新的处理机制可以明显的实现整个WEB程序性能的提升。XMLHttpRequestAjax本身是一门综合性的技术,其主要应用包含了HTML、JavaScript、XML、DOM、XMLHttpRequest等页面技术,但是在这之中最重要的就是XMLHttpRequest对象。在Ajax中主要是通过XMLHttpRequest对象处理发送异步请求和回应的,此对象最早是在IE5中以ActiveX组件的形式出现的,一直到2005年之后才被广泛地使用,在XMLHttpRequest类之中存在有许多的操作属性与处理函数,利用这些结构就可以实现Ajax请求与响应数据的接收处理。XMLHttpRequest对象操作No.名称类型描述01onreadystatechange属性指定当readState状态改变时调用,一般用于指定具体的回调函数02readyState属性返回当前请求的状态,只读03responseBody属性将回应信息正文以unsignedbyte数组形式返回,只读04responseStream属性以AdoStream对象的形式返回响应信息,只读05responseText属性接收以普通文本返回的数据,只读06responseXML属性接收以XML文档形式回应的数据,只读07status属性返回当前请求的http状态码,只读08statusText属性返回当前请求的响应行状态,只读09abort()函数取消当前所发出的请求10getAllResponseHeaders()函数取得所有的HTTP头信息11getResponseHeader()函数取得一个指定的HTTP头信息12open()函数创建一个HTTP请求,并指定请求模式,如GET请求或POST请求13send()函数将创建的请求发送到服务器端,并接收回应信息14setRequestHeader()函数设置一个指定请求的HTTP头信息readyState在XMLHttpRequest类中最重要的一个属性就是readyState,该属性描述了不同的Ajax的数据处理状态,开发者要根据不同的状态进行不同的处理操作,五种具体的取值定义如下:0:请求没有发出(在调用open()函数之前)。1:请求已经建立但还没有发出(在调用send()函数之前)。2:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。3:请求已经处理,正在接收服务器的信息,响应中通常有部分数据可用,但是服务器还没有完成响应。4:响应已完成,可以访问服务器响应并使用它。范例:定义EchoServlet程序类packagecom.yootk.servlet;
@WebServlet("/echo.action")//映射路径
publicclassEchoServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ //GET请求处理
req.setCharacterEncoding("UTF-8"); //请求编码
resp.setCharacterEncoding("UTF-8"); //响应编码
resp.setContentType("text/html;charset=UTF-8"); //响应MIME
Stringparam=req.getParameter("message"); //获取请求参数
resp.getWriter().println("【ECHO】"+param); //响应输出
}
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ //POST请求处理
this.doGet(req,resp); //调用doGet()方法
}
}范例:定义Ajax页面<scripttype="text/javascript">
window.onload=function(){
document.getElementById("sendBut").addEventListener("click",function(){
msg=document.getElementById("msg").value; //获取用户发送数据
if(msg){ //msg数据存在
xmlHttpRequest=newXMLHttpRequest(); //实例化异步请求对象
xmlHttpRequest.open("post","echo.action"); //请求处理地址
xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //请求MIME类型
xmlHttpRequest.onreadystatechange=function(){//Ajax回调
if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
echoMsg=xmlHttpRequest.responseText; //响应数据
pElement=document.createElement("p"); //创建XML元素
pElement.appendChild(document.createTextNode(echoMsg));
document.getElementById("echoDiv").appendChild(pElement);
document.getElementById("msg").value=""; //清空数据
}
}
xmlHttpRequest.send("message="+msg); //请求发送
}
},false);
}
</script>范例:HTML5中的Ajax应用<scripttype="text/javascript">
window.onload=function(){
document.getElementById("sendBut").addEventListener("click",function(){
msg=document.getElementById("msg").value; //获取用户发送数据
if(msg){ //msg存在数据信息
xmlHttpRequest=newXMLHttpRequest(); //实例化异步的请求对象
if(xmlHttpRequest.withCredentials){ //判断当前的浏览器是否支持Ajax
alert("对不起,您的浏览器不支持Ajax的处理操作!");
}else{ //当前浏览器支持Ajax
xmlHttpRequest.open("post","echo.action"); //请求处理地址
xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //请求MIME类型
xmlHttpRequest.onprogress=function(ev){ //请求处理进度
document.querySelector("#statusDiv").innerHTML+="<p>正在进行数据处理操作,处理进度:"+
(ev.loaded/ev.total)*100+"%</p>";
}xmlHttpRequest.onload=function(ev){ //接收响应
echoMsg=xmlHttpRequest.responseText; //响应数据
pElement=document.createElement("p");//创建XML元素
pElement.appendChild(document.createTextNode(echoMsg)); //元素内容
document.getElementById("echoDiv").appendChild(pElement);//追加元素
document.getElementById("msg").value="";//清空数据
}xmlHttpRequest.send("message="+msg); //请求发送
}
}
},false);
}
</script>Ajax数据验证项目开发中,Ajax是一个有效的数据处理技术补充,例如:在进行用户注册时,为了防止注册用户ID相同,那么就可以直接通过Ajax进行数据库的用户名检查,如果当前输入的用户ID不存在,则表示可以注册,否则将不允许注册范例:用户名检测Servletpackagecom.yootk.servlet;
@WebServlet("/check.action")//映射路径
publicclassCheckServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ //处理GET请求
req.setCharacterEncoding("UTF-8"); //请求编码
resp.setCharacterEncoding("UTF-8"); //响应编码
resp.setContentType("text/html;charset=UTF-8"); //响应MIME
booleanflag=false; //检测标记
Stringmid=req.getParameter("mid"); //接收用户ID
Stringsql="SELECTCOUNT(*)FROMmemberWHEREmid=?"; //查询用户量
try{
PreparedStatementpstmt=DatabaseConnection .getConnection().prepareStatement(sql); //数据库对象
pstmt.setString(1,mid); //SQL参数
ResultSetrs=pstmt.executeQuery(); //数据查询
if(rs.next()){ //有数据返回
longcount=rs.getLong(1); //获取数据量
if(count==0){ //用户ID不存在
flag=true; //修改登录标记
}
}
}catch(Exceptione){
e.printStackTrace(); //输出异常信息
}finally{
DatabaseConnection.close(); //关闭数据库
}
resp.getWriter().print(flag); //输出结果
}
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ //处理POST请求
this.doGet(req,resp); //调用doGet()方法
}
}范例:用户注册检测<scripttype="text/javascript">
window.onload=function(){
document.getElementById("mid").addEventListener("blur",function(){
if(this.value){ //mid不为空
xmlHttpRequest=newXMLHttpRequest(); //实例化异步的请求对象
if(xmlHttpRequest.withCredentials){ //判断当前的浏览器是否支持Ajax
alert("对不起,您的浏览器不支持Ajax的处理操作!");
}else{ //当前浏览器支持Ajax
xmlHttpRequest.open("post","check.action"); //请求处理地址
xmlHttpRequest.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded"); //请求MIME类型
xmlHttpRequest.onload=function(ev){ //接收响应
flag=xmlHttpRequest.responseText.trim(); //响应数据
if(flag=="true"){ //允许使用,设置成功标记
document.getElementById("midSpan").innerHTML="<imgsrc='images/right.png'style='width:30px;'>"
}else{ //不允许使用,设置失败标记
document.getElementById("midSpan").innerHTML="<imgsrc='images/wrong.png'style='width:30px;'>"
}
}
xmlHttpRequest.send("mid="+this.value); //请求发送
}
}
},false);
}
</script>验证码验证码是程序入口中最为重要的安全检测机制,在用户登录或注册时都可以通过验证码防止可能出现的恶意程序,在用户输入完成验证码之后也可以直接基于Ajax实现异步验证处理,这样在用户输入错误后可以方便的实现验证码校验结果范例:验证码检测Servletpackagecom.yootk.servlet;
@WebServlet("/verify.action") //映射路径
publicclassVerifyServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{//处理GET请求
req.setCharacterEncoding("UTF-8"); //请求编码
resp.setCharacterEncoding("UTF-8"); //响应编码
resp.setContentType("text/html;charset=UTF-8"); //响应MIME
Stringcode=req.getParameter("code"); //输入验证码
Stringrand=(String)req.getSession().getAttribute("rand"); //获取验证码
resp.getWriter().print(rand.equalsIgnoreCase(code)); //输出结果
}
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{//处理POST请求
this.doGet(req,resp); //调用doGet()方法
}
}范例:验证码检测页面<scripttype="text/javascript">
window.onload=function(){
document.getElementById("code").addEventListener("blur",function(){
if(this.value){ //code不为空
xmlHttpRequest=newXMLHttpRequest(); //异步请求对象
if(xmlHttpRequest.withCredentials){ //浏览器是否支持
alert("对不起,您的浏览器不支持Ajax的处理操作!");
}else{ //浏览器支持Ajax
xmlHttpRequest.open("post","verify.action"); //请求处理地址
xmlHttpRequest.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded"); //请求MIME类型
xmlHttpRequest.onload=function(ev){ //接收响应
flag=xmlHttpRequest.responseText.trim(); //响应数据
if(flag=="true"){ //验证成功
document.getElementById("codeSpan").innerHTML="<imgsrc='images/right.png'style='width:30px;'>"
}else{ //验证失败
document.getElementById("codeSpan").innerHTML="<imgsrc='images/wrong.png'style='width:30px;'>"//如果此时没有生成随机数,则浏览器会认为是同一张图片,而不重新加载
document.getElementById("codeImg").src="image.jsp?rd="+Math.random(); //修改图片
}
}
xmlHttpRequest.send("code="+this.value); //请求发送
}
}
},false);
}
</script>Ajax加载XML数据Ajax技术设计之初的目的就是为了解决数据传输问题,而对于数据传输的类型除了之前使用的文本数据格式之外,最终的就是XML数据结构,利用XML结构可以实现一组数据的响应操作范例:生成XML数据packagecom.yootk.servlet;
@WebServlet("/dept.action")//映射路径
publicclassDeptServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{//处理GET请求
req.setCharacterEncoding("UTF-8"); //请求编码
resp.setCharacterEncoding("UTF-8"); //响应编码
resp.setContentType("text/xml;charset=UTF-8"); //响应MIME
longdeptnos[]=newlong[]{10,20,30}; //部门编号
Stringdnames[]=newString[]{"教学研发部","财务部","市场部"};//部门名称
Stringlocs[]=newString[]{"北京","上海","广州"}; //部门位置
Documentdocument=DocumentHelper.createDocument(); //创建一个空的文档
ElementbooksElement=document.addElement("depts"); //定义根元素
for(intx=0;x<deptnos.length;x++){ //添加子元素
ElementdeptElement=booksElement.addElement("dept");//创建子元素
deptElement.addElement("deptno")
.setText(String.valueOf(deptnos[x])); //创建并设置元素内容
deptElement.addElement("dname").setText(dnames[x]);//创建并设置元素内容
deptElement.addElement("loc").setText(locs[x]); //创建并设置元素内容
}
XMLWriterwriter=newXMLWriter(resp.getOutputStream());//XML文件输出
writer.write(document); //输出文档内容
writer.close(); //关闭输出操作}
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{//处理POST请求
this.doGet(req,resp); //调用doGet()方法
}
}范例:异步加载部门信息<scripttype="text/javascript">
window.onload=function(){
document.getElementById("loadBut").addEventListener("click",function(){
xmlHttpRequest=newXMLHttpRequest(); //实例化异步请求对象
if(xmlHttpRequest.withCredentials){ //浏览器是否支持Ajax
alert("对不起,您的浏览器不支持Ajax的处理操作!");
}else{ //浏览器支持Ajax
xmlHttpRequest.open("post","dept.action"); //请求处理地址
xmlHttpRequest.onload=function(ev){ //接收响应
deptDOM=xmlHttpRequest.responseXML; //接收XML对象
deptList=deptDOM.getElementsByTagName("dept"); //获取部门集合
for(x=0;x<deptList.length;x++){
deptno=deptList[x].getElementsByTagName("deptno").item(0).firstChild.nodeValue;
dname=deptList[x].getElementsByTagName("dname").item(0).firstChild.nodeValue;
loc=deptList[x].getElementsByTagName("loc").item(0).firstChild.nodeValue;
trElement=document.createElement("tr"); //创建<tr>元素
trElement.setAttribute("id","dept-"+deptno); //定义元素属性
deptnoTdElement=document.createElement("td"); //创建<td>元素
dnameTdElement=document.createElement("td"); //创建<td>元素
locTdElement=document.createElement("td"); //创建<td>元素
deptnoTdElement.appendChild(document.createTextNode(deptno));
dnameTdElement.appendChild(document.createTextNode(dname));
locTdElement.appendChild(document.createTextNode(loc));
trElement.appendChild(deptnoTdElement); //添加表格列
trElement.appendChild(dnameTdElement); //添加表格列
trElement.appendChild(locTdElement); //添加表格列
document.getElementById("deptBody").appendChild(trElement);
}
}
xmlHttpRequest.send(null); //请求发送
}
},false);
}
</script>手机扫码——随时关注我们我们将持续进行各类编程技术的课程直播,如果你想第一时间收到我们的课程直播信息,可以拿出手机,通过不同平台APP扫码关注。技术学习小程序打开微信添加“沐言优拓”小程序,里面有免费的各类编程资源,通过手机直接学习。李兴华JavaWEB开发实战第10章:JSON编程XML缺点在早期的数据交换处理中,由于开发者所使用的平台不同,所以常见的做法是利用XML进行数据导出与导入设计,但是在实际的开发中,这样的做法会存在有如下的几个缺点:缺点一:XML设计之初兼顾到了页面显示的需求,所以文件的结构过于繁琐,从而影响到传输性能;缺点二:XML数据生成与解析的过程过于繁琐,需要开发者进行大量节点关系的配置处理;缺点三:在使用Ajax进行数据交换时需要通过脚本语言进行繁琐的DOM解析操作。JSON诞生为了解决传统XML在数据存储中的缺点,于是在2001年出现了JSON(JavaScriptObjectNotation、JS对象符号)数据格式,该数据结构由DouglasCrockford设计并推广,在2006年发展成为主流数据格式,沿用至今已经成为了各个软件项目中必备的一项开发技术,JSON官方网站地址为“”。范例:XML与JSON对比XML结构:<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><company><name>沐言科技</name><homepage></homepage><depts><dept>教学研发部</dept><dept>财务部</dept><dept>市场部</dept></depts></company>JSON结构:{ "name":"沐言科技", "homepage":"", "depts":[ "教学研发部", "财务部", "市场部" ]}JSON技术应用在使用XML进行数据描述时由于受到XML语法限制,所以在编写文件内容时每次都需要额外的编写前导声明、根元素与完结元素,这样就加重了数据传输的负担。而通过JSON描述的数据不仅清晰而且简洁,数据量的体积也相对较小,这样就可以代替XML达到轻量级数据传输的目的,从而提高程序的响应性能JSON组成JSON的数据结构组成相对简单,主要就是由普通数据以及数组两类的形式完成,其中在一个数组中还可以继续嵌套另外一个数组项,同时可以方便的保存各种数据类型(数字、字符串、布尔、日期等)范例:定义基础JSON结构JSON中的数据要求必须放在“{}”或“[]”之间,其中“{}”主要保存数据对,而“[]”保存的是数组。每一对完整的数据都是由“key:value”的结构所组成,多个不同的数据对直接使用“,”分开,在进行数据添加时可以添加基础的数据项,也可以使用“[]”定义数组,同时在数组中也可以定义数据对结构{
"name":"沐言科技",
"location":"中国-北京",
"homepage":""
}定义JSON结构范例:定义JSON数组范例:定义复杂JSON结构{
"name":"沐言科技",
"depts":["教学研发部","财务部","市场部"],
"homepage":""
}{
"name":"沐言科技",
"depts":[
{"deptno":10,"dname":"教学研发部","loc":"北京"},
{"deptno":20,"dname":"财务部","loc":"上海"},
{"deptno":30,"dname":"市场部","loc":"广州"}],
"homepage":""
}JSONObject类继承结构项目开发中如果要想定义JSON结构的字符串,可以直接采用字符串拼凑的方式,或者是使用一些Java的开源工具类来完成,在国内使用较多的工具是阿里推出的FastJSON组件,而国外使用较多的是Jackson组件,本次开发将通过FastJSON实现JSON数据的生成与解析处理。在FastJSON中如果要想进行数据对的设置,可以通过JSONObject类来完成,该类是JSON抽象类的子类,如图10-5所示,而在进行数据解析时也可以通过JSON抽象类中提供的parseObject()方法将数据转为JSONObject实例JSONObject类继承结构JSONObject类常用方法No.方法类型描述01publicJSONObject()构造实例化JSONObject类对象02publicintsize()普通返回保存数据的个数03publicbooleancontainsValue(Objectvalue)普通判断指定的key是否存在04public<T>TgetObject(Stringkey,Class<T>clazz)普通将数据解析为指定类型的对象05publicBooleangetBoolean(Stringkey)普通根据KEY查询对应的布尔数据06publicIntegergetInteger(Stringkey)普通根据KEY查询对应的整型数据07publicLonggetLong(Stringkey)普通根据KEY查询对应的长整型数据08publicDoublegetDouble(Stringkey)普通根据KEY查询对应的浮点型数据09publicBigDecimalgetBigDecimal(Stringkey)普通根据KEY查询对应的BigDecimal数据10publicBigIntegergetBigInteger(Stringkey)普通根据KEY查询对应的BigInteger数据11publicStringgetString(Stringkey)普通根据KEY查询对应的字符串数据12publicDategetDate(Stringkey)普通根据KEY查询对应的Date数据13publicJSONArraygetJSONArray(Stringkey)普通根据KEY查询对应的数组数据14publicjava.sql.DategetSqlDate(Stringkey)普通根据KEY获取SQL日期数据15publicTimestampgetTimestamp(Stringkey)普通根据KEY获取SQL时间戳16publicObjectput(Stringkey,Objectvalue)普通设置数据对17publicvoidputAll(Map<?extendsString,?>m)普通添加一组数据18publicObjectremove(Objectkey)普通删除指定KEY的数据19publicSet<String>keySet()普通获取全部的KEY20publicSet<Entry<String,Object>>entrySet()普通获取全部数据信息范例:生成JSON数据packagecom.yootk.test;
importcom.alibaba.fastjson.JSONArray;
importcom.alibaba.fastjson.JSONObject;
publicclassYootkJSONDemo{ //李兴华高薪就业编程训练营
publicstaticvoidmain(String[]args){ //沐言科技:
JSONObjectcompanyObject=newJSONObject(); //创建JSON对象
companyObject.put("name","沐言科技"); //添加数据
companyObject.put("homepage",""); //添加数据
System.out.println(companyObject.toJSONString()); //生成JSON数据
}
}范例:JSON数据解析packagecom.yootk.test;
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.JSONObject;
importjava.util.Map;
publicclassYootkJSONDemo{ //李兴华高薪就业编程训练营
publicstaticvoidmain(String[]args){ //沐言科技:
StringjsonData="{\"name\":\"沐言科技\",\"homepage\":\"\"}";
JSONObjectjsonObject=JSON.parseObject(jsonData); //字符串解析
for(Map.Entry<String,Object>entry:jsonObject.entrySet()){//迭代输出
System.out.println("KEY="+entry.getKey()+"、VALUE="+entry.getValue());
}
}
}JSONArray类继承结构除了普通的键值对之外,在JSON中还包含有数组数据信息,数组中的每一个元素可以是基本数据,也可能是另外一组键值对,FastJSON组件针对于数组的操作提供了JSONArray程序类JSONArray类常用方法No.方法类型描述01publicJSONArray()构造实例化JSONArray类对象02publicintsize()普通获取JSONArray数组大小03publicIterator<Object>iterator()普通数据转换为Iterator迭代输出04publicObject[]toArray()普通获取全部保存数据05publicvoidclear()普通数据清空06publicObjectset(intindex,Objectelement)普通修改指定索引数据项07publicvoidadd(intindex,Objectelement)普通在指定索引位置上追加数据08publicintindexOf(Objecto)普通获取指定数据的索引值09publicObjectget(intindex)普通获取指定索引数据10publicJSONObjectgetJSONObject(intindex)普通获取指定索引内容并以JSONObject类型返回11publicJSONArraygetJSONArray(intindex)普通获取指定索引内容并以JSONArray类型返回12public<T>TgetObject(intindex,Class<T>clazz)普通将指定索引数据转为指定对象后返回13publicXxxgetXxx(intindex)普通根据索引获取各类数据,例如:getInt()范例:生成JSON数组packagecom.yootk.test;
importcom.alibaba.fastjson.JSONArray;
importcom.alibaba.fastjson.JSONObject;
publicclassYootkJSONDemo{ //李兴华高薪就业编程训练营
publicstaticvoidmain(String[]args){ //沐言科技:
JSONArrayjsonArray=newJSONArray(); //实例化JSON数组
longdeptnos[]=newlong[]{10,20,30}; //部门编号
Stringdnames[]=newString[]{"教学研发部","财务部","市场部"};//部门名称
Stringlocs[]=newString[]{"北京","上海","广州"};//部门位置
for(intx=0;x<deptnos.length;x++){ //循环添加数据
JSONObjectobject=newJSONObject(); //实例化JSONObject
object.put("deptno",deptnos[x]); //添加数据
object.put("dname",dnames[x]); //添加数据
object.put("loc",locs[x]); //添加数据
jsonArray.add(object); //数组添加数据
}
System.out.println(jsonArray.toJSONString()); //生成JSON文本
}
}范例:解析JSON数组数据packagecom.yootk.test;
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.JSONArray;
importcom.alibaba.fastjson.JSONObject;
publicclassYootkJSONDemo{ //李兴华高薪就业编程训练营
publicstaticvoidmain(String[]args){ //沐言科技:
StringjsonData="[{\"loc\":\"北京\",\"dname\":\"教学研发部\",\"deptno\":10},"+
"{\"loc\":\"上海\",\"dname\":\"财务部\",\"deptno\":20},"+
"{\"loc\":\"广州\",\"dname\":\"市场部\",\"deptno\":30}]";
JSONArrayjsonArray=JSON.parseArray(jsonData); //解析得到JSON数组
for(intx=0;x<jsonArray.size();x++){ //数组循环
JSONObjectobject=jsonArray.getJSONObject(x); //获取JSONObject对象
System.out.println("【部门信息】部门编号:"+object.getLong("deptno")+ "、部门名称:"+object.getString("dname")+ "、部门位置:"+object.getString("loc")); //根据KEY查询数据
}
}
}对象转为JSON数据实际项目开发过程中,往往会利用简单Java类来实现所需数据的封装,而为了便于简单Java类对象信息转为JSON数据内容,开发者可以直接通过FastJSON组件实现处理范例:Java类对象转JSON数据packagecom.yootk.test;
importcom.alibaba.fastjson.JSONObject;
importcom.yootk.vo.Dept;
publicclassYootkJSONDemo{ //李兴华高薪就业编程训练营
publicstaticvoidmain(String[]args){ //沐言科技:
JSONObjectjsonObject=newJSONObject(); //实例化JSONObject类对象
Deptdept=newDept(); //实例化Dept类对象
dept.setDeptno(10L); //属性设置
dept.setDname("教学研发部"); //属性设置
dept.setLoc("北京"); //属性设置
jsonObject.put("dept",dept); //保存对象
System.out.println(jsonObject.toJSONString()); //获取JSON数据
}
}范例:将json文本转为类对象packagecom.yootk.test;
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.JSONObject;
importcom.yootk.vo.Dept;
publicclassYootkJSONDemo{ //李兴华高薪就业编程训练营
publicstaticvoidmain(String[]args){ //沐言科技:
StringjsonData="{\"dept\":{\"deptno\":10,\"dname\":\"教学研发部\","+
"\"loc\":\"北京\"}}"; //JSON文本
JSONObjectjsonObject=JSON.parseObject(jsonData); //获取JSONObject实例
//获取指定KEY对应的对象内容,由于该数据结构与Dept类结构一致,所以可以直接获取指定类型的对象
Deptdept=jsonObject.getObject("dept",Dept.class);//获取对象实例
System.out.println(dept); //对象输出,调用toString()
}
}List转JSON数据在数据传输的过程中,往往会进行一组数据的统一管理,这样在开发中就可以通过数组的形式来完成,而在FastJSON组件中,开发者可以直接使用List集合实现数据保存,同时利用JSON类中所提供的toJSONString()方法可以实现任意类对象实例转为JSON文本的处理范例:List集合转JSON数组packagecom.yootk.test;
importcom.alibaba.fastjson.JSON;
importcom.yootk.vo.Dept;
importjava.util.ArrayList;
importjava.util.List;
publicclassYootkJSONDemo{ //李兴华高薪就业编程训练营
publicstaticvoidmain(String[]args){ //沐言科技:
longdeptnos[]=newlong[]{10,20,30}; //部门编号
Stringdnames[]=newString[]{"教学研发部","财务部","市场部"};//部门名称
Stringlocs[]=newString[]{"北京","上海","广州"}; //部门位置
List<Dept>deptList=newArrayList<>(); //实例化List集合
for(intx=0;x<deptnos.length;x++){
Deptdept=newDept(); //实例化Dept类对象
dept.setDeptno(deptnos[x]); //属性设置
dept.setDname(dnames[x]); //属性设置
dept.setLoc(locs[x]); //属性设置
deptList.add(dept); //添加集合数据
}
StringjsonData=JSON.toJSONString(deptList); //对象转为JSON字符串
System.out.println(jsonData); //输出JSON文本
}
}范例:读取JSON集合packagecom.yootk.test;
importcom.alibaba.fastjson.JSON;
importcom.yootk.vo.Dept;
importjava.util.List;
publicclassYootkJSONDemo{ //李兴华高薪就业编程训练营
publicstaticvoidmain(String[]args){ //沐言科技:
StringjsonData="[{\"deptno\":10,\"dname\":\"教学研发部\",\"loc\":\"北京\"},"+
"{\"deptno\":20,\"dname\":\"财务部\",\"loc\":\"上海\"},"+
"{\"deptno\":30,\"dname\":\"市场部\",\"loc\":\"广州\"}]";
List<Dept>deptList=JSON.parseArray(jsonData,Dept.class);//数据转为集合
for(Deptdept:deptList){ //集合迭代
System.out.println(dept); //数据输出
}
}
}Map与JSON在使用FastJSON实现数据转换处理时,需要利用JSONObject实现数据键值对的配置,随后再通过JSONObject直接生成所需要的JSON文本数据在实际的项目开发中,开发者一般都会使用Map集合保存键值对,为了便于开发者应用,所以在FastJSON组件中提供了一个数据转换引擎,可以直接将Map集合转为JSON数据,如图10-10所示,这样就可以减少对JSONObject类型的依赖,使得程序的编写更加灵活。范例:Map集合转为JSON文本packagecom.yootk.test;
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.serializer.SerializerFeature;
importcom.yootk.vo.Dept;
importjava.util.Date;
importjava.util.HashMap;
importjava.util.Map;
publicclassYootkJSONDemo{
//李兴华高薪就业编程训练营
publicstaticvoidmain(String[]args){
//沐言科技:
Map<String,Object>map=newHashMap<>();
//保存Map集合
map.put("empno",9988L);
//保存数据对
map.put("ename","李兴华");
//保存数据对
map.put("today",newDate());
//保存数据对
Deptdept=newDept();
//实例化Dept类对象
dept.setDeptno(10L);
//属性设置
dept.setDname("教学研发部");
//属性设置
dept.setLoc("北京");
//属性设置
map.put("dept",dept);
//保存数据对
StringjsonData=JSON.toJSONString(map);
//Map转JSONSystem.out.println(jsonData);
}
}JSON定义JSON是一种世界上通用的数据传输结构,所以可以在任意的编程语言中使用JSON数据格式,开发者如果有需要也可以直接在JavaScript中定义JSON结构并进行相关操作。范例:获取JSON数据<html><head><title>沐言科技:</title><metacharset="UTF-8">
<scripttype="text/javascript">
Dtotype.format=function(fmt){ //将时间戳数字转为日期时间
varo={
"M+":this.getMonth()+1,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江阴美术面试题及答案
- 人工智能风控体系构建
- 2026年内蒙古自治区包头市网格员招聘笔试备考题库及答案详解
- 2026年浙江省杭州市住房和城乡建设局人员招聘考试备考题库及答案详解
- 人工智能在银行客户画像中的作用-第12篇
- 2026年聊城市妇幼保健院公开招聘备案制工作人员(7人)考试参考题库及答案详解
- 2026年承德市双桥区住房和城乡建设局人员招聘笔试备考试题及答案详解
- 2026中国科学院上海硅酸盐研究所高技术处主管岗位招聘1人考试参考题库及答案详解
- 2026四川成都市选调公务员90人考试模拟试题及答案详解
- 2026库尔勒陆港商贸物流(集团)有限公司管理岗位公开选聘(8人)考试模拟试题及答案详解
- DZ/T 0156-1995区域地质及矿区地质图清绘规程
- DZ/T 0089-1993地质钻探用钻塔技术条件
- 雇佣兵中文合同协议
- 2025年锂电池安全生产管理和风险辨识手册
- 贵州师范学院《人工智能时代的生物基材料前沿》2023-2024学年第二学期期末试卷
- 管道振动的主要原因、危害及消除措施
- 第一 二章综合测试卷 北师大版八年级数学上册
- 溺水的预防与急救 课件 2024-2025学年人教版(2024)初中体育与健康七年级全一册
- 100以内两位数进位加法退位减法计算题-(直接打印版)
- 血透室医疗垃圾分类
- 小学三年级奥数题100道带答案
评论
0/150
提交评论