客户端jQuery操作json

经常性的会模糊json格式的指定,时间一长很容易忘记,而且在客户端编程当中也非常容易出现错误,并且很难找出其中错在何处。这一切都归结于对json格式的定义不是十分清楚,今天很幸运看到了http://www.ruanyifeng.com/blog/2009/05/data_types_and_json.html这篇文章,其中对于json格式的定义非常清楚。

摘了下面一段:

Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。

 1) 并列的数据之间用逗号(",")分隔。

 2) 映射用冒号(":")表示。

 3) 并列数据的集合(数组)用方括号("[]")表示。

 4) 映射的集合(对象)用大括号("{}")表示

例如1:

var data="{root:[{'name':1,value:'0'}, {name:'6101',value:'北京'}, {name:'6102',value:'天津市'}, {name:'6103',value:'上海市'}, {name:'6104',value:'重庆市'}, {name:'6105',value:'渭南市'}, {name:'6106',value:'延安市'}, {name:'6107',value:'汉中市'}, {name:'6108',value:'榆林市'}, {name:'6109',value:'安康市'}, {name:'6110',value:'商洛市'}]}"; 
例如2:

var data1="[{name:1,value:2},{name:3,value:'中文'}]";

客户端代码:

<script type="text/javascript">
 	$(function(){
 		//key:value 
 		//key:可以加单引号或者双引号 value:如果是数字则不需要要加单引号或双引号,但是字母或者中文必须加单引号或者双引号
 		//ps:data外头的双引号必须追加
 		
 		//json对象获取方式1  
 			//键值集合通过{}进行封装
 		var data="{root:[{'name':1,value:'0'}, {name:'6101',value:'北京'}, {name:'6102',value:'天津市'}, {name:'6103',value:'上海市'}, {name:'6104',value:'重庆市'}, {name:'6105',value:'渭南市'}, {name:'6106',value:'延安市'}, {name:'6107',value:'汉中市'}, {name:'6108',value:'榆林市'}, {name:'6109',value:'安康市'}, {name:'6110',value:'商洛市'}]}"; 
 		var obj=eval("("+data+")");
 		alert(obj.root[0].name);
 			//并列数据的集合(数组)用方括号("[]")表示。
 		var data1="[{name:1,value:2},{name:3,value:'中文'}]";
 		var obj1=eval("("+data1+")");
 		alert(obj1[1].value);
 		
 		//json对象获取方式2-从服务直接获取json对象,不需要进行eval转换
 		$.getJSON("json",{"type":1},function(data){
 			alert("type:1->"+data["name"]);
 		});	
 		
 		$.getJSON("json",{"type":2},function(data){
 			alert("type:2->"+data[0].name);
 		});	
 		
 		//json对象获取方式3
 			//插件使用必须格式化如下格式的json字符串,他比原生的json格式要求更严格,因此往往我们会使用插件的toJSON方法
 		var thing = '[{ "plugin": "jquery-json", "version": 2.4 }]';
 		var obj2=$.evalJSON(thing);
 		alert(obj2[0].plugin);
 		
 		//如何将object, number, string, or array into JSON
 		//下面是关联数组->JSON
 		var arr={"key1":2,"key2":3};//alert(arr["key1"]);
 		var arrjson=$.toJSON(arr);
 		var obj3=$.evalJSON(arrjson); 		
 		alert(obj3.key1);
 		//alert(data.root[0].name);
 	})
 </script>

ps:使用eval对json字符串进行转换成json对象

服务器端代码:

public class JsonServlet extends HttpServlet {
 
 	/* (non-Javadoc)
 	 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 	 */
 	@Override
 	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
 		String type=req.getParameter("type");
 		if("1".equals(type)){
 			ABean ab=new ABean();
 			ab.setName("json1");
 			ab.setValue("value1");
 			JSONObject jo=JSONObject.fromObject(ab);
 			System.out.println(jo.toString());
 			resp.getWriter().print(jo);
 		}else if("2".equals(type)){
 			List<ABean> labs=new ArrayList<ABean>();
 			ABean ab1=new ABean();
 			ab1.setName("json1");
 			ab1.setValue("value1");
 			ABean ab2=new ABean();
 			ab2.setName("json2");
 			ab2.setValue("value2");
 			labs.add(ab1);
 			labs.add(ab2);
 			JSONArray ja=JSONArray.fromObject(labs);
 			System.out.println(ja.toString());
 			resp.getWriter().print(ja);
 		}
 		resp.getWriter().flush();
 		resp.getWriter().close();
 		
 	}
 	/* (non-Javadoc)
 	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 	 */
 	@Override
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
 		doPost(req, resp);
 	}
 	
 }



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值