JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。使用json可以方便地在前段和服务器之间传递消息。JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。本文简单介绍一下json的使用。
这种情况下,java程序需要几个包(见附件json-jar.rar)的支持,使用时需要将其加入到环境变量中。这时,后台程序应该这样写:
public void jsonTest(){ //新建一个json对象数组 JSONArray jsonArray=new JSONArray(); //新建一个json对象,并放入两个键值对,可以理解为一个属性名和一个属性值 JSONObject jObject1=new JSONObject(); jObject1.accumulate("key1","value11"); jObject1.accumulate("key2","value12"); //将json对象翻入对象组中 jsonArray.add(jObject1); JSONObject jObject2=new JSONObject(); jObject2.accumulate("key1","value21"); jObject2.accumulate("key2","value12"); jsonArray.add(jObject2); //返回json对象 HttpServletResponse response=ServletActionContext.getResponse(); response.setCharacterEncoding("UTF-8"); response.setContentType("text/xml"); try { response.getWriter().print(jsonArray); } catch (IOException e) { e.printStackTrace(); } }
在前台可以通过以下方式获取json对象并使用其中的数据:
$.getJSON( "/ygmy/getProClass?proClass.proClass.proclassid=5",//获取json数组(对象)的url function(data){//获取到json数组(对象)后的回调函数 $.each(data,function(i,item){ alert(item.key);//使用json中的值 }); } )
上述代码中的方法$.getJSON()是jQuery对json特殊支持的方法,有关次方法的详细介绍可以参考附件jquery.rar中的jQuery_API_1.5.chm,在使用这个方法时需要在页面中引入附件jquery.rar中的jquery-1.5.1.js
正常情况下,从java后台传递过来的都是字符串而非json对象(组)。这时,我们只需要将字符串按照一定格式拼接起来,然后调用javascript的eval方法即可生成json对象(组)。下边介绍一个例子,通过ajax从后台读取一个字符串,在前台用eval函数生成json对象数组,然后调用。
后台的程序如下所示:
public String forProManagement(){ HttpServletRequest request=ServletActionContext.getRequest(); List<ProClass> proClassBos=proClassDAO.searchProClasses(proClass); request.setAttribute("proClasses", proClassBos); String jsonStr="{ \"employees\" : [" + "{ \"firstName\":\"Bill\" , \"lastName\":\"Gates\" }," + "{ \"firstName\":\"George\" , \"lastName\":\"Bush\" }," + "{ \"firstName\":\"Thomas\" , \"lastName\":\"Carter\" } ]}"; request.setAttribute("jsonStr", jsonStr); return "success"; }
前台js代码如下所示:
$.post( "/ygmy/getProClass?proClass.proClass.proclassid=5", function(data){ alert(data);//此处弹出的是后台拼接的字符串 var obj = eval ("(" + data + ")"); alert(obj);//经过处理后,此处弹出的是[object],即对象数组,此处可参照上一段js代码使用数据 } )
当然也可以再后台将字符串放在request里,前台通过request.getAttribute();读取,然后再进行处理。要怎样实现,可根据具体情况进行选择。