json教程从入门到使用

json教程从入门到使用

一:入门

简介:

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

JSON两种格式:

1、对象

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

2、数组

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

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

javascript中的JSON相关:

一:对象型JSON

      

二:数组型JSON

$(document).ready(function showStudent(){
              varstudent =
              [
                     {"sno":"001","name":"jack","age":130},
                     {"sno":"002","name":"tame","age":120},
                     {"sno":"003","name":"cule","age":110},
              ];
              //以下是两种获取值的方法
              document.write('sno:' + student[0].sno + '    name:' +student[0].name +'    age :' +student[0].age +'<br/>');
              document.write('sno:' + student[0]["sno"] + '   name:' + student[0]["name"] +'    age :' + student[0]["age"]+'<br/>' );
 
              document.write('sno:' + student[1]["sno"] + '   name:' + student[1]["name"] +'    age :' + student[1]["age"]+'<br/>' );
              document.write('sno:' + student[1]["sno"] + '   name:' + student[1]["name"] +'    age :' + student[1]["age"]+'<br/>' );
 
              document.write('sno:' + student[2]["sno"] + '   name:' + student[2]["name"] +'    age :' + student[2]["age"]+'<br/>' );
              document.write('sno:' + student[2]["sno"] + '   name:' + student[2]["name"] +'    age :' + student[2]["age"]+'<br/>' );
       });


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

$(document).ready(function showStudent(){
              varstudent =
              {
                    
                     "sno":"001",
                     "name":"jack",
                     "age":130,
                     "address":
                     [
                            {"pro":"anhui","city":"fuyang"},
                            {"pro":"jiangsu","city":"nanjing"}
                     ]
             
              }
              document.write('sno:' + student.sno    + '    name:' + student.name    +'   age :' + student.age    +'    pro :' + student.address[0].pro +'    city :' + student.address[0].city+'<br/>' );
       });


补充:至于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的值吗?某老师的话:自己动手试试……)。

$(document).ready(function showStudent(){
		var student = 
		{
			
			"sno":"001",
			"name":"jack",
			"age":130,
			"address":
			[
				{"pro":"anhui","city":"fuyang"},
				{"pro":"jiangsu","city":"nanjing"}
			]
		
		}
		document.write('sno :' + student.sno    + '    name:' + student.name    +'    age :' + student.age    +'    pro :' + student.address[0].pro +'    city :' + student.address[0].city +'<br/>' );
	});


注意:别把

typeof(studentJson)+'<br/>

'写成

typeof(studentJson +'<br/>')


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

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

一:Object转换成JSONStr
	$(document).ready(function Object2JSONString(){
		var student = new Student("001","chy");
		var studentJson = student.toJSONString();
		document.write(typeof(studentJson) + '<br/>');
		document.write(studentJson + '<br/>');
	});
	//toJOSNString() 可以把json格式的字符串或者Object转换成json对象
	function Student(sno, name){
		this.sno = sno;
		this.name = name;
	}
二:JSONStr转换成JSON对象
	$(document).ready(function str2json () {
		var studentStr  = '{"sno":"001","name":"jack","age":123}';
		//不推荐、存在安全隐患
		var studentJson = eval('('+studentStr+')');
		//缺陷:不能适用于所有的浏览器
		var studentJson2 = JSON.parse(studentStr);
		//需下载jquery.json-2.4.js、未实现
		//var studentJson3 = jQuery.toJSON(studentStr); 
		//document.write(typeof(studentJson3)+'<br/>' );
		document.write(typeof(studentStr) +'<br/>' );
		document.write(typeof(studentJson)+'<br/>' );
		document.write(typeof(studentJson2)+'<br/>' );
	})
三:JSON对象转换成JSONStr

	$(document).ready(function json2str () {
		var studentJson  = {"sno":"001","name":"jack","age":123};
		//toJSONString()方法需要借助json.js文件(可去官方网站下载)
		var studentStr = studentJson.toJSONString();
		var studentStr2 = JSON.stringify(studentJson);
		document.write(studentStr +'<br/>' );
		document.write(studentStr2 +'<br/>' );
		document.write(typeof(studentStr) +'<br/>' );
		document.write(typeof(studentJson)+'<br/>' );
	})

JSON遍历

四种遍历方式:

<!DOCTYPE HTML>
<html>
	<script src="jquery.min.js"></script>
	<script type="text/javascript">
		function firstMethod(){
			var list1 = [1,3,4];
			document.write(list1[1]+'<br/>');
			var list2 = [{"name":"leamiko","xing":"lin"}];
			document.write(list2[0]["xing"]+'<br/>');
			document.write(list2[0].xing+'<br/>');
			document.write("==========================================================="+'<br/>');
		}

		function secondMethod(){
			var value = 
			{
			    "china":
			    {
			        "hangzhou":{"item":"1"},
			        "shanghai":{"item":"2"},
			        "chengdu":{"item":"3"}
			    },
			    "America":
			    {
			        "aa":{"item":"1"},
			        "bb":{"item":"2"}   
			    },
			    "Spain":
			    {
			        "dd":{"item":"1"},
			        "ee":{"item":"2"},
			        "ff":{"item":"3"}   
			    }
			};
	
			//向里循环的时候只能用external[internal][deeperinternal]...而不能用external.internal.deeperinternal...原因不知道。。。当json类型是{...}时for(var x in value)x指的是每一个值、当json类型是[]时 x指的是数组下标。根据情况利用


			for(var country in value){
				document.write(country +':<br/>');
				for(var city in value[country]){
					document.write('   '+city+':</br>');
					for(var item in value[country][city]){
						document.write('   '+value[country][city][item]+':</br>');
					}
				}
			}
			document.write("==========================================================="+'<br/>');

		}

		function thirdMethod(){
			var value = {
			    "china":
			    [
			        {"name":"hangzhou", "item":"1"},
			        {"name":"shanghai", "item":"2"},
			        {"name":"sichuan", "item":"3"}
			    ],
			    "America":
			    [
			        {"name":"aa", "item":"12"},
			        {"name":"bb", "item":"2"}
			    ],
			    "Spain":
			    [
			        {"name":"cc", "item":"1"},
			        {"name":"dd", "item":"23"},
			        {"name":"ee", "item":"3"}
			    ]
			};
			for(var country in value){
				document.write(country+'<br/>');
				for(var x in value[country]){
					document.write('cityname: ' + value[country][x]["name"] + '  item: ' + value[country][x]["item"] + '<br/>');
				}
			}
			document.write("==========================================================="+'<br/>');

		}

		
		function fourthMethod(){
			var value = {
			    "china":
			    [
			        {"name":"hangzhou", "item":"1"},
			        {"name":"shanghai", "item":"2"},
			        {"name":"sichuan", "item":"3"}
			    ],
			    "America":
			    [
			        {"name":"aa", "item":"12"},
			        {"name":"bb", "item":"2"}
			    ],
			    "Spain":
			    [
			        {"name":"cc", "item":"1"},
			        {"name":"dd", "item":"23"},
			        {"name":"ee", "item":"3"}
			    ]
			};
			for(var country in value){
				document.write(country+'<br/>');
				for(var i=0; i<value[country].length; i++){
					document.write('cityname: ' + value[country][i]["name"] + '  item: ' + value[country][i]["item"] + '<br/>');
				}
			}
			document.write("==========================================================="+'<br/>');

		}

		$(document).ready=firstMethod();
		$(document).ready=secondMethod();
		$(document).ready=thirdMethod();
		$(document).ready=fourthMethod();
	</script>
<body>

</body>
</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

<package name="default" namespace="/" extends="json-default">
    	<action name="jsontest" class="struts2jsonjquery.test.action.JsonJqueryStruts2Action">
    		<!-- 返回单个值的result -->
    		<result name="message" type="json"></result>
    		<!-- 返回UserInfo对象的 -->
    		<result name="userInfo" type="json"></result>
    		<!-- 返回List对象的 -->
    		<result name="list" type="json"></result>
    		<!-- 返回Map对象的 -->
    		<result name="map" type="json"></result>
    	</action>
    </package>

3、jsp

<%@ page language="java" pageEncoding="GBK"%>
<%
	String path = request.getContextPath();
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>Struts2+JQuery+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="<%=path %>/js/jquery.js"></script>
	<script type="text/javascript" src="<%=path %>/js/jsonstyle.js"></script>
  </head>
  
  <body>
    <input id="getMessage" type="button" value="获取单个值"/>  
    <input id="getUserInfo" type="button" value="获取UserInfo对象"/>  
    <input id="getList" type="button" value="获取List对象"/>  
    <input id="getMap" type="button" value="获取Map对象"/>  
    <br>
    <br>
    <br>
    <!-- 要显示信息的层 -->
    <div id="message"></div>
    <form>
    	用户ID:<input name="userInfo.userId" type="text"/><br/>
    	用户名:<input name="userInfo.userName" type="text"/><br/>
    	密   码:<input name="userInfo.password" type="text"/><br>
    	<input id="regRe" type="button" value="注册"/>
    </form>
  </body>
</html>
其中的jsonstyle.js代码:

//初始加载页面时
$(document).ready(function(){
	//为获取单个值的按钮注册鼠标单击事件
	$("#getMessage").click(function(){
		$.getJSON("jsontest!returnMessage.action",function(data){
			//通过.操作符可以从data.message中获得Action中message的值
			$("#message").html("<font color='red'>"+data.message+"</font>");
		});
	});
	//为获取UserInfo对象按钮添加鼠标单击事件
	$("#getUserInfo").click(function(){
		$.getJSON("jsontest!returnUserInfo.action",function(data){
			//清空显示层中的数据
			$("#message").html("");
			//为显示层添加获取到的数据
			//获取对象的数据用data.userInfo.属性
			$("#message").append("<div><font color='red'>用户ID:"+data.userInfo.userId+"</font></div>")
					     .append("<div><font color='red'>用户名:"+data.userInfo.userName+"</font></div>")
					     .append("<div><font color='red'>密码:"+data.userInfo.password+"</font></div>")
		});
	});
	//为获取List对象按钮添加鼠标单击事件
	$("#getList").click(function(){
		$.getJSON("jsontest!returnList.action",function(data){
			//清空显示层中的数据
			$("#message").html("");
			//使用jQuery中的each(data,function(){});函数
			//从data.userInfosList获取UserInfo对象放入value之中
			$.each(data.userInfosList,function(i,value){
				$("#message").append("<div>第"+(i+1)+"个用户:</div>")
						 .append("<div><font color='red'>用户ID:"+value.userId+"</font></div>")
					     .append("<div><font color='red'>用户名:"+value.userName+"</font></div>")
					     .append("<div><font color='red'>密码:"+value.password+"</font></div>");
			});
		});
	});
	//为获取Map对象按钮添加鼠标单击事件
	$("#getMap").click(function(){
		$.getJSON("jsontest!returnMap.action",function(data){
			//清空显示层中的数据
			$("#message").html("");
			//使用jQuery中的each(data,function(){});函数
			//从data.userInfosList获取UserInfo对象放入value之中
			//key值为Map的键值
			$.each(data.userInfosMap,function(key,value){
				$("#message").append("<div><font color='red'>用户ID:"+value.userId+"</font></div>")
					     .append("<div><font color='red'>用户名:"+value.userName+"</font></div>")
					     .append("<div><font color='red'>密码:"+value.password+"</font></div>");
			});
		});
	});
	//向服务器发送表达数据
	$("#regRe").click(function(){
		//把表单的数据进行序列化
		var params = $("form").serialize();
		//使用jQuery中的$.ajax({});Ajax方法
		$.ajax({
			url:"jsontest!gainUserInfo.action",
			type:"POST",
			data:params,
			dataType:"json",
			success:function(data){
				//清空显示层中的数据
			$("#message").html("");
			//为显示层添加获取到的数据
			//获取对象的数据用data.userInfo.属性
			$("#message").append("<div><font color='red'>用户ID:"+data.userInfo.userId+"</font></div>")
					     .append("<div><font color='red'>用户名:"+data.userInfo.userName+"</font></div>")
					     .append("<div><font color='red'>密码:"+data.userInfo.password+"</font></div>")
			}
		});
	});
});



4、action

package struts2jsonjquery.test.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import struts2jsonjquery.test.entity.UserInfo;

import com.opensymphony.xwork2.ActionSupport;

public class JsonJqueryStruts2Action extends ActionSupport {

	private static final long serialVersionUID = 3518833679938898354L;
	
	private String message;		//使用json返回单个值
	private UserInfo userInfo; 		//使用json返回对象
	private List<UserInfo> userInfosList;		//使用josn返回List对象
	private Map<String,UserInfo> userInfosMap; 	//使用json返回Map对象
	//为上面的的属性提供get,Set方法
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public UserInfo getUserInfo() {
		return userInfo;
	}
	public void setUserInfo(UserInfo userInfo) {
		this.userInfo = userInfo;
	}
	public List<UserInfo> getUserInfosList() {
		return userInfosList;
	}
	public void setUserInfosList(List<UserInfo> userInfosList) {
		this.userInfosList = userInfosList;
	}
	public Map<String, UserInfo> getUserInfosMap() {
		return userInfosMap;
	}
	public void setUserInfosMap(Map<String, UserInfo> userInfosMap) {
		this.userInfosMap = userInfosMap;
	}
	/**
	 * <p>
	 * 	返回单个值
	 * <p>
	 * @return
	 */
	public String returnMessage(){
		this.message = "成功返回单个值";
		return "message";
	}
	/**
	 * <p>
	 * 	返回UserInfo对象
	 * </p>
	 * @return
	 */
	public String returnUserInfo(){
		userInfo = new UserInfo();
		userInfo.setUserId(10000);
		userInfo.setUserName("张三");
		userInfo.setPassword("000000");
		return "userInfo";
	}
	/**
	 * <p>
	 * 	返回List对象
	 * </p>
	 * @return
	 */
	public String returnList(){
		userInfosList = new ArrayList<UserInfo>();
		UserInfo u1 = new UserInfo();
		u1.setUserId(10000);
		u1.setUserName("张三");
		u1.setPassword("000000");
		UserInfo u2 = new UserInfo();
		u2.setUserId(10001);
		u2.setUserName("李四");
		u2.setPassword("111111");
		UserInfo u3 = new UserInfo();
		u3.setUserId(10002);
		u3.setUserName("王五");
		u3.setPassword("222222");
		UserInfo u4 = new UserInfo();
		u4.setUserId(10003);
		u4.setUserName("赵六");
		u4.setPassword("333333");
		userInfosList.add(u1);
		userInfosList.add(u2);
		userInfosList.add(u3);
		userInfosList.add(u4);
		return "list";
	}
	/**
	 * <p>
	 * 	返回Map对象
	 * </p>
	 * @return
	 */
	public String returnMap(){
		userInfosMap = new HashMap<String,UserInfo>();
		UserInfo u1 = new UserInfo();
		u1.setUserId(10000);
		u1.setUserName("张三");
		u1.setPassword("000000");
		UserInfo u2 = new UserInfo();
		u2.setUserId(10001);
		u2.setUserName("李四");
		u2.setPassword("111111");
		UserInfo u3 = new UserInfo();
		u3.setUserId(10002);
		u3.setUserName("王五");
		u3.setPassword("222222");
		UserInfo u4 = new UserInfo();
		u4.setUserId(10003);
		u4.setUserName("赵六");
		u4.setPassword("333333");
		userInfosMap.put(u1.getUserId()+"", u1);
		userInfosMap.put(u2.getUserId()+"", u2);
		userInfosMap.put(u3.getUserId()+"", u3);
		userInfosMap.put(u4.getUserId()+"", u4);
		return "map";
	}
	/**
	 * <p>
	 * 	获得对象,也就是通过表达获得对象(异步的)
	 * </P>
	 * @return
	 */
	public String gainUserInfo(){
		System.out.println("用户ID:"+userInfo.getUserId());
		System.out.println("用户名:"+userInfo.getUserName());
		System.out.println("密码:"+userInfo.getPassword());
		return "userInfo";
	}
	/**
	 * 获得单个值就不用写了和平常一样
	 */
}

需要web源码可留下邮箱。。

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值