JSON实例应用

本文介绍了一个使用JSON进行数据交换的示例,展示了如何通过JavaScript将对象转换为JSON格式,并发送到服务器,同时介绍了服务器端如何解析请求中的JSON数据。

JSON实例应用

文章分类:Web前端

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格式的数据)

Html代码 复制代码  收藏代码
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  2. <html>  
  3.   <head>  
  4.        
  5.     <title>JSON学习</title>  
  6.     <meta http-equiv="pragma" content="no-cache">  
  7.     <meta http-equiv="cache-control" content="no-cache">  
  8.     <meta http-equiv="expires" content="0">       
  9.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  10.     <meta http-equiv="description" content="This is my page">  
  11.     <script type="text/javascript" src="js/json.js"></script>  
  12.   </head>  
  13.      
  14.   <script language="javascript">  
  15.     var xmlHttp;   
  16.     function createXMLHttpRequest() {     
  17.         if (window.ActiveXObject) {     
  18.             xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");     
  19.         }      
  20.         else if (window.XMLHttpRequest) {     
  21.             xmlHttp = new XMLHttpRequest();     
  22.         }     
  23.     }   
  24.     function doJSON(){   
  25.         var car = getCarObject();   
  26.         //将JS对象转化成JSON格式的Text   
  27.         var carAsJSON = JSON.stringify(car);   
  28.         alert(carAsJSON);   
  29.         var url = "JsonTest1?timeStamp="+new Date().getTime();   
  30.         createXMLHttpRequest();   
  31.         xmlHttp.open("POST", url, true);   
  32.         xmlHttp.onreadystatechange = handleStateChange;   
  33.         xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");   
  34.         xmlHttp.send(carAsJSON);   
  35.     }   
  36.     //Ajax的回调方法   
  37.     function handleStateChange(){   
  38.         if(xmlHttp.readyState == 4){   
  39.             if(xmlHttp.status == 200){   
  40.                 parseResults();   
  41.             }   
  42.         }   
  43.     }   
  44.     //具体的回调作动   
  45.     function parseResults(){   
  46.         var responseDiv = document.getElementById("serverResponse");   
  47.         if(responseDiv.hasChildNodes()){   
  48.             responseDiv.removeChild(responseDiv.childNodes[0]);   
  49.         }   
  50.         //xmlHttp.responseText是servlet中返回回来的JSON格式的数据,将它创建成一个js的node对象放到DIV中   
  51.         var responseText = document.createTextNode(xmlHttp.responseText);   
  52.         responseDiv.appendChild(responseText);   
  53.         //将json格式的Text转化成JSON对象:用eval('('+response+')')   
  54.         var resultJson = eval('('+xmlHttp.responseText+')');   
  55.         alert(resultJson);   
  56.         alert(resultJson.make);   
  57.         alert(resultJson.model);   
  58.         alert(resultJson.year);   
  59.         alert(resultJson.color);   
  60.     }   
  61.     //JS中的一个对象   
  62.     function Car(make,model,year,color){   
  63.         this.make = make;   
  64.         this.model = model;   
  65.         this.year = year;   
  66.         this.color = color;   
  67.     }   
  68.     //构成对象并返回   
  69.     function getCarObject(){   
  70.         return new Car("Dodge", "Coronet R/T", 1968, "yellow");   
  71.     }   
  72.   </script>  
  73.      
  74.   <body>  
  75.     <form action="#">     
  76.         <input type="button" value="Click here to send JSON data to the server" onclick="doJSON();"/>     
  77.     </form>  
  78.     <h2>Server Response:</h2>  
  79.     <div id="serverResponse">  
  80.            
  81.     </div>  
  82.   </body>  
  83. </html>  
<!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中实现如下:

Java代码 复制代码  收藏代码
  1. public class JsonTest1 extends HttpServlet {   
  2.   
  3.     /**  
  4.      *   
  5.      */  
  6.     private static final long serialVersionUID = 306348969081510518L;   
  7.   
  8.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  9.             throws ServletException, IOException {   
  10.         this.doPost(request, response);   
  11.     }   
  12.   
  13.     public void doPost(HttpServletRequest request, HttpServletResponse response)   
  14.             throws ServletException, IOException {   
  15.         String json = readJSONStringFromRequestBody(request);   
  16.         System.out.println("json = " + json);   
  17.                 //将request中接收的字符串转化成json对java对象   
  18.         JSONObject jsonObject = JSONObject.fromObject(json);   
  19.         System.out.println("jsonObject = " + jsonObject.toString());   
  20.         System.out.println(jsonObject.getInt("year"));   
  21.         System.out.println(jsonObject.getString("make"));   
  22.         System.out.println(jsonObject.getString("model"));   
  23.         System.out.println(jsonObject.getString("color"));   
  24.         //设置返回的格式是text   
  25.         response.setContentType("text/plain");   
  26.         response.getWriter().print(jsonObject);   
  27.     }   
  28.   
  29.     private String readJSONStringFromRequestBody(HttpServletRequest request) {   
  30.         StringBuffer json = new StringBuffer();   
  31.         String line = null;   
  32.         try {   
  33.             BufferedReader bufferRead = request.getReader();   
  34.             while ((line = bufferRead.readLine()) != null) {   
  35.                 System.out.println("line = " + line);   
  36.                 json.append(line);   
  37.             }   
  38.         } catch (Exception e) {   
  39.             e.printStackTrace();   
  40.         }   
  41.         return json.toString();   
  42.     }   
  43. }  
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的配置如下:

Xml代码 复制代码  收藏代码
  1. <servlet>  
  2.     <servlet-name>JsonTest1</servlet-name>  
  3.     <servlet-class>com.mengya.servlet.JsonTest1</servlet-class>  
  4.   </servlet>  
  5.   
  6.   <servlet-mapping>  
  7.     <servlet-name>JsonTest1</servlet-name>  
  8.     <url-pattern>/JsonTest1</url-pattern>  
  9.   </servlet-mapping>  

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

Java代码 复制代码  收藏代码
  1. public class JsonBean1 {   
  2.     private String col;   
  3.   
  4.     private String row;   
  5.   
  6.     private String value;   
  7.   
  8.     public String getCol() {   
  9.         return col;   
  10.     }   
  11.   
  12.     public void setCol(String col) {   
  13.         this.col = col;   
  14.     }   
  15.   
  16.     public String getRow() {   
  17.         return row;   
  18.     }   
  19.   
  20.     public void setRow(String row) {   
  21.         this.row = row;   
  22.     }   
  23.   
  24.     public String getValue() {   
  25.         return value;   
  26.     }   
  27.   
  28.     public void setValue(String value) {   
  29.         this.value = value;   
  30.     }   
  31. }  
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;
	}
}
 
Java代码 复制代码  收藏代码
  1. /**  
  2.  *   
  3.  * @author 张明学  
  4.  *   
  5.  */  
  6. public class JsonBanTest {   
  7.   
  8.     /**  
  9.      * @param args  
  10.      */  
  11.     public static void main(String[] args) {   
  12.         boolean[] boolArray = new boolean[] { truefalsetrue };   
  13.         JSONArray jsonArray1 = JSONArray.fromObject(boolArray);   
  14.         System.out.println(jsonArray1);   
  15.   
  16.         List list = new ArrayList();   
  17.         list.add("first");   
  18.         list.add("second");   
  19.         JSONArray jsonArray2 = JSONArray.fromObject(list);   
  20.         System.out.println(jsonArray2);   
  21.   
  22.         JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");   
  23.         System.out.println(jsonArray3);   
  24.   
  25.         Map map = new HashedMap();   
  26.         map.put("name""json");   
  27.         map.put("bool", Boolean.TRUE);   
  28.         map.put("int"new Integer(1));   
  29.         map.put("arr"new String[] { "a""b" });   
  30.         map.put("func""function(i){return this.arr[i]}");   
  31.         JSONObject json = JSONObject.fromObject(map);   
  32.         System.out.println(json);   
  33.            
  34.         JsonBean1 jb = new JsonBean1();   
  35.         jb.setCol("col1");   
  36.         jb.setRow("row1");   
  37.         jb.setValue("123");   
  38.         JSONObject ja = JSONObject.fromObject(jb);   
  39.         System.out.println(ja.toString());   
  40.            
  41.         List list2 = new ArrayList();   
  42.         JsonBean1 jb2 = new JsonBean1();   
  43.         jb2.setCol("col1");   
  44.         jb2.setRow("row1");   
  45.         jb2.setValue("123");   
  46.         list2.add(jb);   
  47.         list2.add(jb2);   
  48.         JSONArray jsonArray = JSONArray.fromObject(list2);   
  49.         System.out.println(jsonArray.toString());   
  50.            
  51.         String jsonStr = "{name=/"json/",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";   
  52.         JSONObject jsonObject = JSONObject.fromObject(jsonStr);   
  53.         System.out.println(jsonObject);   
  54.         System.out.println(jsonObject.get("name"));   
  55.         System.out.println(jsonObject.get("bool"));   
  56.         System.out.println(jsonObject.get("int"));   
  57.         System.out.println(jsonObject.get("double"));   
  58.         System.out.println(jsonObject.get("func"));   
  59.         System.out.println(jsonObject.get("array"));   
  60.     }   
  61.        
  62. }  
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值