JSON

  • 一、JSON前言
  • 1 JSON(JavaScript Object Notation)
  • 2 JSON的优点
  • 3 语法:
  • 4 JSON对象和JSON字符串
  • 二、示例演示
  • 1 HTML代码:
  • 2 jQuery部分代码
  • 三、Controller返回一个JSON文本
  • 四、Controller中返回一个JSON集合文本
  • 五、在java中使用JSON


一、JSON前言

1 JSON(JavaScript Object Notation)

一种轻量级的数据交换格式
采用独立于语言的文本格式
通常用于在客户端和服务器之间传递数据

2 JSON的优点

轻量级交互语言
结构简单
易于解析

3 语法:
  • 3.1 定义JSON对象
    var obj={“属性名”:value,“属性名”:value};
    例:var person = { “name” : “张三”, “age” : 30, “spouse” : null };
  • 3.2 定义JSON数组:
    var jsonArr=[value,value,…]
  • 例:
    var countryArray = [ “中国”, “美国”, “俄罗斯” ];
    var personArray = [ { “name”:“张三”, “age”:30 },
    { “name”:“李四”, “age”:40 } ];
4 JSON对象和JSON字符串

JSON对象: var jsonobj = {“name”:“peter”,“age”:25};
JSON文本: var jsontxt = “{“name”:“peter”,“age”:25}”;
一个满足JSON对象格式的文本字符串。
请求/响应只能是文本格式。
以响应方式发送的内容也一定是文本格式。
所以当我们使用ajax时,接收的都是JSON文本。
怎么将一个json文本转换成一个json对象。
使用到一个叫eval()的javascript函数。
var jsonobj = eval( “(”+jsontxt+")" );

二、示例演示

1 HTML代码:
<body>
一、JSON格式的user对象:<div id="objectDiv"></div><br>
二、JSON格式的字符串数组:  <select id="arraySel"></select>
<ul id="arrayUl"></ul>
三、JSON格式的user对象数组:<div id="objectArrayDiv"></div>
</body>
2 jQuery部分代码
$(document).ready(function() {
	//1、定义JSON格式的user对象,并在div中输出
	var user = {
		"id" : 1,
		"name" : "张三",
		"pwd" : "000"
	};
	$("#objectDiv").append("ID:" + user.id + "<br>")
	               .append("用户名:" + user.name + "<br>")
	               .append("密码:" + user.pwd + "<br>");
	//2、定义JSON格式的字符串数组,并在ul和select中输出
	var ary = [ "中", "美", "俄" ];
	var $ary = $(ary);
	var $ul = $("#arrayUl"); // 展示数据的ul元素
	var $sel = $("#arraySel"); // 展示数据的select元素
	$ary.each(function() { $ul.append("<li>"+this+"</li>"); });
	$ary.each(function(i) {
	   $sel.append("<option value='"+(i+1)+"'>"+this+"</option>");
    });
	//3、定义JSON格式的user对象数组,并使用<table>输出
	var userArray = [ {
		"id" : 2,
		"name" : "admin",
		"pwd" : "123"
	}, {
		"id" : 3,
		"name" : "詹姆斯",
		"pwd" : "11111"
	}, {
		"id" : 4,
		"name" : "梅西",
		"pwd" : "6666"
	} ];
	var $table = $("<table border='1'></table>").append(
	       "<tr><td>ID</td><td>用户名</td><td>密码</td></tr>");
	$(userArray).each(function() {
	   $table.append("<tr><td>" + this.id + "</td><td>"
                    + this.name + "</td><td>"
                    + this.pwd + "</td></tr>");
	});
	$("#objectArrayDiv").append($table);

});

三、Controller返回一个JSON文本

  1. Controller部分代码:
/ /定义JSON文本
		String jsontxt = "{\"userName\":\"admin\",\"userPwd\":\"123456\"}";
		// 设置响应的编码格式
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		// 获取输出流对象
		PrintWriter out = response.getWriter();
		// 输出结果
		out.print(jsontxt);
		out.flush();
		out.close();
  1. 页面代码
<button>显示JSON文本内容</button>
	用户名:<span id="sp_Name"></span>
  1. $.ajax代码
$(document).ready(function(){
		//文本框失去焦点事件
		$("button").click(function(){
			//获取文本的值
			var name=$(this).val();
			//使用jQuery的:$.ajax()
			$.ajax({
                "url"       : "${pageContext.request.contextPath }//getJSON.do",   //要提交的URL路径
                "type"      : "GET",           //发送请求的方式
                "data"      : null,    //要发送到服务器的数据
                "dataType"  : "JSON",          //指定返回的数据格式
                "success"   : callBack,        //响应成功后要执行的代码
                "error"     : function() {     //请求失败后要执行的代码
                    alert("用户名验证时出现错误,请稍后再试或与管理员联系!");
                }
              });
 
		//响应成功时的回调函数
		function callBack(data) {
			console.log(data);
			$("#sp_Name").text(data.userName)
		}//end of callBack()
		});
 	});

四、Controller中返回一个JSON集合文本

1 Controller:

//定义JSON集合文本
	String jsonList="[{\"userName\":\"admin\",\"userPwd\":\"123456\"},
                       {\"userName\":\"oracle\",\"userPwd\":\"123456\"}]";
	out.print(jsonList);

2 AJAX部分:

//响应成功时的回调函数
	function callBack(data) {
		console.log(data);			
		var str="";
		for(var i=0;i<data.length;i++){
			str+=data[i].userName+",";
		}
		$("#sp_Name").text(str);
	}

五、在java中使用JSON

一 JSON能在JAVA中做什么?

将java中对象,或集合转换成json文本。

json文本:是一个按json语法格式编写的String。

  1. 引入库:
  2. java定义JSONObject数组 定义jsonarray_json

  3. 将java对象与json文本互换
    1) 将java对象转换成了json文本
//创建一个java对象
Goods goods = new Goods(1, "HTC", 10.5);
//使用josn对象
JSONObject jsonobj = JSONObject.fromObject(goods);
//转换成json文本
String jsontxt = jsonobj.toString();
System.out.println(jsontxt);

2) 将json文本转换成java对象

String jsontxt1 = "{\"goodsId\":2,\"goodsName\":\"KFC\",\"goodsPrice\":18.8}";
JSONObject jsonobj1 = JSONObject.fromObject(jsontxt1);
Goods goods1 = (Goods) JSONObject.toBean(jsonobj1, Goods.class);
System.out.println(goods1.getGoodsName());
  1. 将JAVA集合与JSON文本互换
List<Goods> goodsList = new ArrayList<Goods>();
goodsList.add(new Goods(1, "HTC", 10.5));
goodsList.add(new Goods(2, "KFC", 18.8));
		
//将java集合转换成json文本
JSONArray jsonarray = JSONArray.fromObject(goodsList);
String jsontxt = jsonarray.toString();
System.out.println(jsontxt);
		
List<Goods> goodsList1 = (List<Goods>) JSONArray.toList(jsonarray, Goods.class);
for (Goods goods : goodsList1) {
	System.out.println(goods.getGoodsName());
}
  1. JsonConfig

在进行转换时配置的对象。

Goods goods1 =  new Goods(1, "HTC", 10.5);
		Goods goods2 = new Goods(2, "KFC", 18.8);
		Types type = new Types(1, "食品");
		goods1.setGoodsType(type);
		goods2.setGoodsType(type);
		type.getGoodsList().add(goods1);
		type.getGoodsList().add(goods2);
		
		JsonConfig jsonConfig = new JsonConfig();
		jsonConfig.setExcludes(new String[]{"goodsList"});
		JSONObject typejsonobj = JSONObject.fromObject(type,jsonConfig);
		System.out.println(typejsonobj.toString());
		JSONObject goodsjsonobj = JSONObject.fromObject(goods1,jsonConfig);
		System.out.println(goodsjsonobj.toString());

jsonConfig.setExcludes(new String[]{“goodsList”}); 表示不包含字符串数组中属性。