JSON实例应用

JSON实际就是一种数据格式,传递数据,特别的地方在于:JSON的数据格式可以直接构成JavaScript中的一个对象,因些可以在JavaScript很易容访问到它的数据。(个人的见解,关于JSON的其它资料可以去google一下)

下面就应用一下JSON:

使用JSON需要一些文件:将js对象转化成JSON的数据格式的JS如:json.js

                                   将Java对象转化成JSON的数据格式的jar包:json-lib-2.3-jdk15.jar等可以在下面的附件中获得

我在我的工程中引入了这个文件(也可以不用这个文件,那么你需要自己在js或class中拼成JSON格式的数据)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>JSON学习</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript" src="js/json.js"></script>
  </head>
  
  <script language="javascript">
  	var xmlHttp;
  	function createXMLHttpRequest() {  
    	if (window.ActiveXObject) {  
        	xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  
     	}   
     	else if (window.XMLHttpRequest) {  
        	xmlHttp = new XMLHttpRequest();  
     	}  
 	}
 	function doJSON(){
 		var car = getCarObject();
 		//将JS对象转化成JSON格式的Text
 		var carAsJSON = JSON.stringify(car);
 		alert(carAsJSON);
 		var url = "JsonTest1?timeStamp="+new Date().getTime();
 		createXMLHttpRequest();
 		xmlHttp.open("POST", url, true);
 		xmlHttp.onreadystatechange = handleStateChange;
 		xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 		xmlHttp.send(carAsJSON);
 	}
 	//Ajax的回调方法
 	function handleStateChange(){
 		if(xmlHttp.readyState == 4){
 			if(xmlHttp.status == 200){
 				parseResults();
 			}
 		}
 	}
 	//具体的回调作动
 	function parseResults(){
 		var responseDiv = document.getElementById("serverResponse");
 		if(responseDiv.hasChildNodes()){
 			responseDiv.removeChild(responseDiv.childNodes[0]);
 		}
 		//xmlHttp.responseText是servlet中返回回来的JSON格式的数据,将它创建成一个js的node对象放到DIV中
 		var responseText = document.createTextNode(xmlHttp.responseText);
 		responseDiv.appendChild(responseText);
 		//将json格式的Text转化成JSON对象:用eval('('+response+')')
 		var resultJson = eval('('+xmlHttp.responseText+')');
 		alert(resultJson);
 		alert(resultJson.make);
 		alert(resultJson.model);
 		alert(resultJson.year);
 		alert(resultJson.color);
 	}
 	//JS中的一个对象
 	function Car(make,model,year,color){
 		this.make = make;
 		this.model = model;
 		this.year = year;
 		this.color = color;
 	}
 	//构成对象并返回
 	function getCarObject(){
		return new Car("Dodge", "Coronet R/T", 1968, "yellow");
 	}
  </script>
  
  <body>
  	<form action="#">  
    	<input type="button" value="Click here to send JSON data to the server" onclick="doJSON();"/>  
	</form>
	<h2>Server Response:</h2>
	<div id="serverResponse">
		
	</div>
  </body>
</html>

 在我的servlet中实现如下:

public class JsonTest1 extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 306348969081510518L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String json = readJSONStringFromRequestBody(request);
		System.out.println("json = " + json);
                //将request中接收的字符串转化成json对java对象
		JSONObject jsonObject = JSONObject.fromObject(json);
		System.out.println("jsonObject = " + jsonObject.toString());
		System.out.println(jsonObject.getInt("year"));
		System.out.println(jsonObject.getString("make"));
		System.out.println(jsonObject.getString("model"));
		System.out.println(jsonObject.getString("color"));
		//设置返回的格式是text
		response.setContentType("text/plain");
		response.getWriter().print(jsonObject);
	}

	private String readJSONStringFromRequestBody(HttpServletRequest request) {
		StringBuffer json = new StringBuffer();
		String line = null;
		try {
			BufferedReader bufferRead = request.getReader();
			while ((line = bufferRead.readLine()) != null) {
				System.out.println("line = " + line);
				json.append(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return json.toString();
	}
}

 servlet的配置如下:

<servlet>
    <servlet-name>JsonTest1</servlet-name>
    <servlet-class>com.mengya.servlet.JsonTest1</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>JsonTest1</servlet-name>
    <url-pattern>/JsonTest1</url-pattern>
  </servlet-mapping>

 相于java对象与json之类的转化的一些测试如下(跟上面的实例无关):

public class JsonBean1 {
	private String col;

	private String row;

	private String value;

	public String getCol() {
		return col;
	}

	public void setCol(String col) {
		this.col = col;
	}

	public String getRow() {
		return row;
	}

	public void setRow(String row) {
		this.row = row;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
}
 
/**
 * 
 * @author 张明学
 * 
 */
public class JsonBanTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		boolean[] boolArray = new boolean[] { true, false, true };
		JSONArray jsonArray1 = JSONArray.fromObject(boolArray);
		System.out.println(jsonArray1);

		List list = new ArrayList();
		list.add("first");
		list.add("second");
		JSONArray jsonArray2 = JSONArray.fromObject(list);
		System.out.println(jsonArray2);

		JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");
		System.out.println(jsonArray3);

		Map map = new HashedMap();
		map.put("name", "json");
		map.put("bool", Boolean.TRUE);
		map.put("int", new Integer(1));
		map.put("arr", new String[] { "a", "b" });
		map.put("func", "function(i){return this.arr[i]}");
		JSONObject json = JSONObject.fromObject(map);
		System.out.println(json);
		
		JsonBean1 jb = new JsonBean1();
		jb.setCol("col1");
		jb.setRow("row1");
		jb.setValue("123");
		JSONObject ja = JSONObject.fromObject(jb);
		System.out.println(ja.toString());
		
		List list2 = new ArrayList();
		JsonBean1 jb2 = new JsonBean1();
		jb2.setCol("col1");
		jb2.setRow("row1");
		jb2.setValue("123");
		list2.add(jb);
		list2.add(jb2);
		JSONArray jsonArray = JSONArray.fromObject(list2);
		System.out.println(jsonArray.toString());
		
		String jsonStr = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";
		JSONObject jsonObject = JSONObject.fromObject(jsonStr);
		System.out.println(jsonObject);
		System.out.println(jsonObject.get("name"));
		System.out.println(jsonObject.get("bool"));
		System.out.println(jsonObject.get("int"));
		System.out.println(jsonObject.get("double"));
		System.out.println(jsonObject.get("func"));
		System.out.println(jsonObject.get("array"));
	}
	
}
 

 

你可能感兴趣的:(JavaScript,json,Ajax,cache,servlet)