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文本
- 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();
- 页面代码
<button>显示JSON文本内容</button>
用户名:<span id="sp_Name"></span>
- $.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。
- 引入库:
- 将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());
- 将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());
}
- 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”}); 表示不包含字符串数组中属性。