日期:2014-05-16  浏览次数:20364 次

json系列文章——json的使用

json系列文章——json的使用

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。使用json可以方便地在前段和服务器之间传递消息。JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。本文简单介绍一下json的使用。

一、后台传递过来的是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

二、后台传递过来的是json格式的字符串

正常情况下,从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();读取,然后再进行处理。要怎样实现,可根据具体情况进行选择。