json教程从入门到使用

来源:互联网 发布:日本动画公司排行知乎 编辑:程序博客网 时间:2024/06/18 08:12

json教程从入门到使用

一:入门

简介:

JSON(JavaScriptObject Notation)、轻量级数据交换格式、非常适合于服务器与 JavaScript 的交互。

JSON两种格式:

1、对象

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

2、数组

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

(具体格式可参照www.json.org、这里只做简略介绍、下方会贴出具体相关)

javascript中的JSON相关:

一:对象型JSON

      

二:数组型JSON

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. $(document).ready(function showStudent(){  
  2.               varstudent =  
  3.               [  
  4.                      {"sno":"001","name":"jack","age":130},  
  5.                      {"sno":"002","name":"tame","age":120},  
  6.                      {"sno":"003","name":"cule","age":110},  
  7.               ];  
  8.               //以下是两种获取值的方法  
  9.               document.write('sno:' + student[0].sno + '    name:' +student[0].name +'    age :' +student[0].age +'<br/>');  
  10.               document.write('sno:' + student[0]["sno"] + '   name:' + student[0]["name"] +'    age :' + student[0]["age"]+'<br/>' );  
  11.    
  12.               document.write('sno:' + student[1]["sno"] + '   name:' + student[1]["name"] +'    age :' + student[1]["age"]+'<br/>' );  
  13.               document.write('sno:' + student[1]["sno"] + '   name:' + student[1]["name"] +'    age :' + student[1]["age"]+'<br/>' );  
  14.    
  15.               document.write('sno:' + student[2]["sno"] + '   name:' + student[2]["name"] +'    age :' + student[2]["age"]+'<br/>' );  
  16.               document.write('sno:' + student[2]["sno"] + '   name:' + student[2]["name"] +'    age :' + student[2]["age"]+'<br/>' );  
  17.        });  


三:相互嵌套(仅举一种、可自己弄着玩试试)

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. $(document).ready(function showStudent(){  
  2.               varstudent =  
  3.               {  
  4.                       
  5.                      "sno":"001",  
  6.                      "name":"jack",  
  7.                      "age":130,  
  8.                      "address":  
  9.                      [  
  10.                             {"pro":"anhui","city":"fuyang"},  
  11.                             {"pro":"jiangsu","city":"nanjing"}  
  12.                      ]  
  13.                
  14.               }  
  15.               document.write('sno:' + student.sno    + '    name:' + student.name    +'   age :' + student.age    +'    pro :' + student.address[0].pro +'    city :' + student.address[0].city+'<br/>' );  
  16.        });  


补充:至于JSON为什么能这样取得数据的值? It is based on a subset of the JavaScript Programming LanguageStandardECMA-262 3rd Edition - December 1999.      它是javascript的一个子集、javascript会对其进行解析(如何实现暂不理会)。

 

四:json格式的字符串、和json对象(对于什么时候称作json对象不做深究)的区别:

很简单:json格式的字符串、很明显就是一个字符串、只具有字符串的特性和功能。只是格式上看起来像json对象而已、而不具有json对象所具有的功能(比如上面的例子中拿到student对象的某个属性的值、上面是String的话、student.sno能获得sno的值吗?某老师的话:自己动手试试……)。

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. $(document).ready(function showStudent(){  
  2.         var student =   
  3.         {  
  4.               
  5.             "sno":"001",  
  6.             "name":"jack",  
  7.             "age":130,  
  8.             "address":  
  9.             [  
  10.                 {"pro":"anhui","city":"fuyang"},  
  11.                 {"pro":"jiangsu","city":"nanjing"}  
  12.             ]  
  13.           
  14.         }  
  15.         document.write('sno :' + student.sno    + '    name:' + student.name    +'    age :' + student.age    +'    pro :' + student.address[0].pro +'    city :' + student.address[0].city +'<br/>' );  
  16.     });  


注意:别把

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. typeof(studentJson)+'<br/>  

'写成
[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. typeof(studentJson +'<br/>')  


这样就成了JSON对象与String拼接了、结果会变成两个string…

JSON格式Str与JSON对象之间的转换

一:Object转换成JSONStr

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="white-space:pre">  </span>$(document).ready(function Object2JSONString(){  
  2.         var student = new Student("001","chy");  
  3.         var studentJson = student.toJSONString();  
  4.         document.write(typeof(studentJson) + '<br/>');  
  5.         document.write(studentJson + '<br/>');  
  6.     });  
  7.     //toJOSNString() 可以把json格式的字符串或者Object转换成json对象  
  8.     function Student(sno, name){  
  9.         this.sno = sno;  
  10.         this.name = name;  
  11.     }  

二:JSONStr转换成JSON对象

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="white-space:pre">  </span>$(document).ready(function str2json () {  
  2.         var studentStr  = '{"sno":"001","name":"jack","age":123}';  
  3.         //不推荐、存在安全隐患  
  4.         var studentJson = eval('('+studentStr+')');  
  5.         //缺陷:不能适用于所有的浏览器  
  6.         var studentJson2 = JSON.parse(studentStr);  
  7.         //需下载jquery.json-2.4.js、未实现  
  8.         //var studentJson3 = jQuery.toJSON(studentStr);   
  9.         //document.write(typeof(studentJson3)+'<br/>' );  
  10.         document.write(typeof(studentStr) +'<br/>' );  
  11.         document.write(typeof(studentJson)+'<br/>' );  
  12.         document.write(typeof(studentJson2)+'<br/>' );  
  13.     })  

三:JSON对象转换成JSONStr

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="white-space:pre">  </span>$(document).ready(function json2str () {  
  2.         var studentJson  = {"sno":"001","name":"jack","age":123};  
  3.         //toJSONString()方法需要借助json.js文件(可去官方网站下载)  
  4.         var studentStr = studentJson.toJSONString();  
  5.         var studentStr2 = JSON.stringify(studentJson);  
  6.         document.write(studentStr +'<br/>' );  
  7.         document.write(studentStr2 +'<br/>' );  
  8.         document.write(typeof(studentStr) +'<br/>' );  
  9.         document.write(typeof(studentJson)+'<br/>' );  
  10.     })  

JSON遍历

四种遍历方式:
[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <!DOCTYPE HTML>  
  2. <html>  
  3.     <script src="jquery.min.js"></script>  
  4.     <script type="text/javascript">  
  5.         function firstMethod(){  
  6.             var list1 = [1,3,4];  
  7.             document.write(list1[1]+'<br/>');  
  8.             var list2 = [{"name":"leamiko","xing":"lin"}];  
  9.             document.write(list2[0]["xing"]+'<br/>');  
  10.             document.write(list2[0].xing+'<br/>');  
  11.             document.write("==========================================================="+'<br/>');  
  12.         }  
  13.   
  14.         function secondMethod(){  
  15.             var value =   
  16.             {  
  17.                 "china":  
  18.                 {  
  19.                     "hangzhou":{"item":"1"},  
  20.                     "shanghai":{"item":"2"},  
  21.                     "chengdu":{"item":"3"}  
  22.                 },  
  23.                 "America":  
  24.                 {  
  25.                     "aa":{"item":"1"},  
  26.                     "bb":{"item":"2"}     
  27.                 },  
  28.                 "Spain":  
  29.                 {  
  30.                     "dd":{"item":"1"},  
  31.                     "ee":{"item":"2"},  
  32.                     "ff":{"item":"3"}     
  33.                 }  
  34.             };  
  35.       
  36.             //向里循环的时候只能用external[internal][deeperinternal]...而不能用external.internal.deeperinternal...原因不知道。。。当json类型是{...}时for(var x in value)x指的是每一个值、当json类型是[]时 x指的是数组下标。根据情况利用  
  37.   
  38.   
  39.             for(var country in value){  
  40.                 document.write(country +':<br/>');  
  41.                 for(var city in value[country]){  
  42.                     document.write('   '+city+':</br>');  
  43.                     for(var item in value[country][city]){  
  44.                         document.write('   '+value[country][city][item]+':</br>');  
  45.                     }  
  46.                 }  
  47.             }  
  48.             document.write("==========================================================="+'<br/>');  
  49.   
  50.         }  
  51.   
  52.         function thirdMethod(){  
  53.             var value = {  
  54.                 "china":  
  55.                 [  
  56.                     {"name":"hangzhou""item":"1"},  
  57.                     {"name":"shanghai""item":"2"},  
  58.                     {"name":"sichuan""item":"3"}  
  59.                 ],  
  60.                 "America":  
  61.                 [  
  62.                     {"name":"aa""item":"12"},  
  63.                     {"name":"bb""item":"2"}  
  64.                 ],  
  65.                 "Spain":  
  66.                 [  
  67.                     {"name":"cc""item":"1"},  
  68.                     {"name":"dd""item":"23"},  
  69.                     {"name":"ee""item":"3"}  
  70.                 ]  
  71.             };  
  72.             for(var country in value){  
  73.                 document.write(country+'<br/>');  
  74.                 for(var x in value[country]){  
  75.                     document.write('cityname: ' + value[country][x]["name"] + '  item: ' + value[country][x]["item"] + '<br/>');  
  76.                 }  
  77.             }  
  78.             document.write("==========================================================="+'<br/>');  
  79.   
  80.         }  
  81.   
  82.           
  83.         function fourthMethod(){  
  84.             var value = {  
  85.                 "china":  
  86.                 [  
  87.                     {"name":"hangzhou""item":"1"},  
  88.                     {"name":"shanghai""item":"2"},  
  89.                     {"name":"sichuan""item":"3"}  
  90.                 ],  
  91.                 "America":  
  92.                 [  
  93.                     {"name":"aa""item":"12"},  
  94.                     {"name":"bb""item":"2"}  
  95.                 ],  
  96.                 "Spain":  
  97.                 [  
  98.                     {"name":"cc""item":"1"},  
  99.                     {"name":"dd""item":"23"},  
  100.                     {"name":"ee""item":"3"}  
  101.                 ]  
  102.             };  
  103.             for(var country in value){  
  104.                 document.write(country+'<br/>');  
  105.                 for(var i=0; i<value[country].length; i++){  
  106.                     document.write('cityname: ' + value[country][i]["name"] + '  item: ' + value[country][i]["item"] + '<br/>');  
  107.                 }  
  108.             }  
  109.             document.write("==========================================================="+'<br/>');  
  110.   
  111.         }  
  112.   
  113.         $(document).ready=firstMethod();  
  114.         $(document).ready=secondMethod();  
  115.         $(document).ready=thirdMethod();  
  116.         $(document).ready=fourthMethod();  
  117.     </script>  
  118. <body>  
  119.   
  120. </body>  
  121. </html>  

JSON在struts2中的使用

说白了、json在java web项目中的应用本质就是客户端请求到服务端、服务端将数据处理成json格式返回给客户端、客户端再根据返回的数据进行下一步操作。。。采用json就

是因为json更容易和快速的被解析、我们又可以根据自己的需要在后台设定好数据格式、这样在前台可以直接拿来用或者加工一下。。。。

(最好是下个能直接用的项目、然后自己动手多试、自己搭、如果jar包冲突、搞了半天没解决、什么激情也没有了、还什么都没有干、、、)

只搞一种、有时间补充:

1、jar包

commons-beanutils-1.7.0.jar

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

commons-lang-2.3.jar

commons-logging-1.0.4.jar

ezmorph-1.0.3.jar

freemarker-2.3.15.jar

json-lib-2.1.jar

ognl-2.7.3.jar

struts2-core-2.1.8.1.jar

struts2-json-plugin-2.1.8.1.jar

xwork-core-2.1.6.jar


2、struts.xml

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <package name="default" namespace="/" extends="json-default">  
  2.         <action name="jsontest" class="struts2jsonjquery.test.action.JsonJqueryStruts2Action">  
  3.             <!-- 返回单个值的result -->  
  4.             <result name="message" type="json"></result>  
  5.             <!-- 返回UserInfo对象的 -->  
  6.             <result name="userInfo" type="json"></result>  
  7.             <!-- 返回List对象的 -->  
  8.             <result name="list" type="json"></result>  
  9.             <!-- 返回Map对象的 -->  
  10.             <result name="map" type="json"></result>  
  11.         </action>  
  12.     </package>  

3、jsp

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <%@ page language="java" pageEncoding="GBK"%>  
  2. <%  
  3.     String path = request.getContextPath();  
  4. %>  
  5.   
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.       
  10.     <title>Struts2+JQuery+JSON</title>  
  11.     <meta http-equiv="pragma" content="no-cache">  
  12.     <meta http-equiv="cache-control" content="no-cache">  
  13.     <meta http-equiv="expires" content="0">      
  14.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  15.     <meta http-equiv="description" content="This is my page">  
  16.     <script type="text/javascript" src="<%=path %>/js/jquery.js"></script>  
  17.     <script type="text/javascript" src="<%=path %>/js/jsonstyle.js"></script>  
  18.   </head>  
  19.     
  20.   <body>  
  21.     <input id="getMessage" type="button" value="获取单个值"/>    
  22.     <input id="getUserInfo" type="button" value="获取UserInfo对象"/>    
  23.     <input id="getList" type="button" value="获取List对象"/>    
  24.     <input id="getMap" type="button" value="获取Map对象"/>    
  25.     <br>  
  26.     <br>  
  27.     <br>  
  28.     <!-- 要显示信息的层 -->  
  29.     <div id="message"></div>  
  30.     <form>  
  31.         用户ID:<input name="userInfo.userId" type="text"/><br/>  
  32.         用户名:<input name="userInfo.userName" type="text"/><br/>  
  33.         密   码:<input name="userInfo.password" type="text"/><br>  
  34.         <input id="regRe" type="button" value="注册"/>  
  35.     </form>  
  36.   </body>  
  37. </html>  
其中的jsonstyle.js代码:
[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. //初始加载页面时  
  2. $(document).ready(function(){  
  3.     //为获取单个值的按钮注册鼠标单击事件  
  4.     $("#getMessage").click(function(){  
  5.         $.getJSON("jsontest!returnMessage.action",function(data){  
  6.             //通过.操作符可以从data.message中获得Action中message的值  
  7.             $("#message").html("<font color='red'>"+data.message+"</font>");  
  8.         });  
  9.     });  
  10.     //为获取UserInfo对象按钮添加鼠标单击事件  
  11.     $("#getUserInfo").click(function(){  
  12.         $.getJSON("jsontest!returnUserInfo.action",function(data){  
  13.             //清空显示层中的数据  
  14.             $("#message").html("");  
  15.             //为显示层添加获取到的数据  
  16.             //获取对象的数据用data.userInfo.属性  
  17.             $("#message").append("<div><font color='red'>用户ID:"+data.userInfo.userId+"</font></div>")  
  18.                          .append("<div><font color='red'>用户名:"+data.userInfo.userName+"</font></div>")  
  19.                          .append("<div><font color='red'>密码:"+data.userInfo.password+"</font></div>")  
  20.         });  
  21.     });  
  22.     //为获取List对象按钮添加鼠标单击事件  
  23.     $("#getList").click(function(){  
  24.         $.getJSON("jsontest!returnList.action",function(data){  
  25.             //清空显示层中的数据  
  26.             $("#message").html("");  
  27.             //使用jQuery中的each(data,function(){});函数  
  28.             //从data.userInfosList获取UserInfo对象放入value之中  
  29.             $.each(data.userInfosList,function(i,value){  
  30.                 $("#message").append("<div>第"+(i+1)+"个用户:</div>")  
  31.                          .append("<div><font color='red'>用户ID:"+value.userId+"</font></div>")  
  32.                          .append("<div><font color='red'>用户名:"+value.userName+"</font></div>")  
  33.                          .append("<div><font color='red'>密码:"+value.password+"</font></div>");  
  34.             });  
  35.         });  
  36.     });  
  37.     //为获取Map对象按钮添加鼠标单击事件  
  38.     $("#getMap").click(function(){  
  39.         $.getJSON("jsontest!returnMap.action",function(data){  
  40.             //清空显示层中的数据  
  41.             $("#message").html("");  
  42.             //使用jQuery中的each(data,function(){});函数  
  43.             //从data.userInfosList获取UserInfo对象放入value之中  
  44.             //key值为Map的键值  
  45.             $.each(data.userInfosMap,function(key,value){  
  46.                 $("#message").append("<div><font color='red'>用户ID:"+value.userId+"</font></div>")  
  47.                          .append("<div><font color='red'>用户名:"+value.userName+"</font></div>")  
  48.                          .append("<div><font color='red'>密码:"+value.password+"</font></div>");  
  49.             });  
  50.         });  
  51.     });  
  52.     //向服务器发送表达数据  
  53.     $("#regRe").click(function(){  
  54.         //把表单的数据进行序列化  
  55.         var params = $("form").serialize();  
  56.         //使用jQuery中的$.ajax({});Ajax方法  
  57.         $.ajax({  
  58.             url:"jsontest!gainUserInfo.action",  
  59.             type:"POST",  
  60.             data:params,  
  61.             dataType:"json",  
  62.             success:function(data){  
  63.                 //清空显示层中的数据  
  64.             $("#message").html("");  
  65.             //为显示层添加获取到的数据  
  66.             //获取对象的数据用data.userInfo.属性  
  67.             $("#message").append("<div><font color='red'>用户ID:"+data.userInfo.userId+"</font></div>")  
  68.                          .append("<div><font color='red'>用户名:"+data.userInfo.userName+"</font></div>")  
  69.                          .append("<div><font color='red'>密码:"+data.userInfo.password+"</font></div>")  
  70.             }  
  71.         });  
  72.     });  
  73. });  



4、action

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. package struts2jsonjquery.test.action;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import struts2jsonjquery.test.entity.UserInfo;  
  9.   
  10. import com.opensymphony.xwork2.ActionSupport;  
  11.   
  12. public class JsonJqueryStruts2Action extends ActionSupport {  
  13.   
  14.     private static final long serialVersionUID = 3518833679938898354L;  
  15.       
  16.     private String message;     //使用json返回单个值  
  17.     private UserInfo userInfo;      //使用json返回对象  
  18.     private List<UserInfo> userInfosList;     //使用josn返回List对象  
  19.     private Map<String,UserInfo> userInfosMap;    //使用json返回Map对象  
  20.     //为上面的的属性提供get,Set方法  
  21.     public String getMessage() {  
  22.         return message;  
  23.     }  
  24.     public void setMessage(String message) {  
  25.         this.message = message;  
  26.     }  
  27.     public UserInfo getUserInfo() {  
  28.         return userInfo;  
  29.     }  
  30.     public void setUserInfo(UserInfo userInfo) {  
  31.         this.userInfo = userInfo;  
  32.     }  
  33.     public List<UserInfo> getUserInfosList() {  
  34.         return userInfosList;  
  35.     }  
  36.     public void setUserInfosList(List<UserInfo> userInfosList) {  
  37.         this.userInfosList = userInfosList;  
  38.     }  
  39.     public Map<String, UserInfo> getUserInfosMap() {  
  40.         return userInfosMap;  
  41.     }  
  42.     public void setUserInfosMap(Map<String, UserInfo> userInfosMap) {  
  43.         this.userInfosMap = userInfosMap;  
  44.     }  
  45.     /** 
  46.      * <p> 
  47.      *  返回单个值 
  48.      * <p> 
  49.      * @return 
  50.      */  
  51.     public String returnMessage(){  
  52.         this.message = "成功返回单个值";  
  53.         return "message";  
  54.     }  
  55.     /** 
  56.      * <p> 
  57.      *  返回UserInfo对象 
  58.      * </p> 
  59.      * @return 
  60.      */  
  61.     public String returnUserInfo(){  
  62.         userInfo = new UserInfo();  
  63.         userInfo.setUserId(10000);  
  64.         userInfo.setUserName("张三");  
  65.         userInfo.setPassword("000000");  
  66.         return "userInfo";  
  67.     }  
  68.     /** 
  69.      * <p> 
  70.      *  返回List对象 
  71.      * </p> 
  72.      * @return 
  73.      */  
  74.     public String returnList(){  
  75.         userInfosList = new ArrayList<UserInfo>();  
  76.         UserInfo u1 = new UserInfo();  
  77.         u1.setUserId(10000);  
  78.         u1.setUserName("张三");  
  79.         u1.setPassword("000000");  
  80.         UserInfo u2 = new UserInfo();  
  81.         u2.setUserId(10001);  
  82.         u2.setUserName("李四");  
  83.         u2.setPassword("111111");  
  84.         UserInfo u3 = new UserInfo();  
  85.         u3.setUserId(10002);  
  86.         u3.setUserName("王五");  
  87.         u3.setPassword("222222");  
  88.         UserInfo u4 = new UserInfo();  
  89.         u4.setUserId(10003);  
  90.         u4.setUserName("赵六");  
  91.         u4.setPassword("333333");  
  92.         userInfosList.add(u1);  
  93.         userInfosList.add(u2);  
  94.         userInfosList.add(u3);  
  95.         userInfosList.add(u4);  
  96.         return "list";  
  97.     }  
  98.     /** 
  99.      * <p> 
  100.      *  返回Map对象 
  101.      * </p> 
  102.      * @return 
  103.      */  
  104.     public String returnMap(){  
  105.         userInfosMap = new HashMap<String,UserInfo>();  
  106.         UserInfo u1 = new UserInfo();  
  107.         u1.setUserId(10000);  
  108.         u1.setUserName("张三");  
  109.         u1.setPassword("000000");  
  110.         UserInfo u2 = new UserInfo();  
  111.         u2.setUserId(10001);  
  112.         u2.setUserName("李四");  
  113.         u2.setPassword("111111");  
  114.         UserInfo u3 = new UserInfo();  
  115.         u3.setUserId(10002);  
  116.         u3.setUserName("王五");  
  117.         u3.setPassword("222222");  
  118.         UserInfo u4 = new UserInfo();  
  119.         u4.setUserId(10003);  
  120.         u4.setUserName("赵六");  
  121.         u4.setPassword("333333");  
  122.         userInfosMap.put(u1.getUserId()+"", u1);  
  123.         userInfosMap.put(u2.getUserId()+"", u2);  
  124.         userInfosMap.put(u3.getUserId()+"", u3);  
  125.         userInfosMap.put(u4.getUserId()+"", u4);  
  126.         return "map";  
  127.     }  
  128.     /** 
  129.      * <p> 
  130.      *  获得对象,也就是通过表达获得对象(异步的) 
  131.      * </P> 
  132.      * @return 
  133.      */  
  134.     public String gainUserInfo(){  
  135.         System.out.println("用户ID:"+userInfo.getUserId());  
  136.         System.out.println("用户名:"+userInfo.getUserName());  
  137.         System.out.println("密码:"+userInfo.getPassword());  
  138.         return "userInfo";  
  139.     }  
  140.     /** 
  141.      * 获得单个值就不用写了和平常一样 
  142.      */  

0 0
原创粉丝点击