json 由键值对组成,并且用大括号包围,键名用引号引起,键和值之间使用冒号进行分隔,多组键值对之间使用逗号进行分隔。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>json</title>
<script type="text/javascript">
var jsonObj = {
"key1" : 123,
"key2" : "abc",
"key3" : true,
"key4" : [11,"arr",false],
"key5" : {
"key5_1" : 551,
"key5_2" : "key5_2_value"
},
"key6" : [{
"key6_1_1":6611,
"key6_1_2":"key6_1_2_value"
}, {
"key6_2_1":6621,
"key6_2_2":"key6_2_2_value"
}]
};
</script>
</head>
<body>
</body>
</html>
json 本身是一个对象。
获取 json 中键为 key 的值:json对象.key;
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>json</title>
<script type="text/javascript">
var jsonObj = {
"key1" : 123,
"key2" : "abc",
"key3" : true,
"key4" : [11,"arr",false],
"key5" : {
"key5_1" : 551,
"key5_2" : "key5_2_value"
},
"key6" : [{
"key6_1_1":6611,
"key6_1_2":"key6_1_2_value"
}, {
"key6_2_1":6621,
"key6_2_2":"key6_2_2_value"
}]
};
alert(jsonObj.key1);//123
alert(jsonObj.key4[0]);//11
alert(jsonObj.key5.key5_1);//551
alert(jsonObj.key6[1].key6_2_1);//6611
</script>
</head>
<body>
</body>
</html>
json 的两种形式:
在script标签中:
方法 | 意义 |
---|---|
JSON.stringify( json对象 ) | 把 json 对象转换成为 json 字符串 |
JSON.parse( json字符串 ) | 把 json 字符串转换成为 json 对象 |
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>json</title>
<script type="text/javascript">
var jsonObj = {
"key1" : 123,
"key2" : "abc",
"key3" : true,
"key4" : [11,"arr",false],
"key5" : {
"key5_1" : 551,
"key5_2" : "key5_2_value"
},
"key6" : [{
"key6_1_1":6611,
"key6_1_2":"key6_1_2_value"
}, {
"key6_2_1":6621,
"key6_2_2":"key6_2_2_value"
}]
};
/*
在script标签中:
JSON.stringify(json对象) 把json对象转换成为json字符串
JSON.parse(json字符串) 把json字符串转换成为json对象
*/
var jsonString = JSON.stringify(jsonObj);
alert(jsonString);
var jsonObject = JSON.parse(jsonString);
alert(jsonObject);
</script>
</head>
<body>
</body>
</html>
导入 Google 提供的 gson.jar 包。
方法 | 意义 |
---|---|
String toJson(Object obj) | 将 obj 对象转换成 json 字符串 |
T fromJson(String str, Class clazz) | 将 json 字符串转换成 Object 对象 |
JsonTest.java
@Test
public void JavaBean_JSON() {
//创建JavaBean
Person person = new Person("mcc", 20);
//创建Gson对象
Gson gson = new Gson();
//String toJson(Object obj) 将obj对象转换成json字符串
String perJson = gson.toJson(person);
System.out.println(perJson);//{"name":"mcc","age":20}
//T fromJson(String str, Class clazz) 将json字符串转换成Object对象
Person per = gson.fromJson(perJson, Person.class);
System.out.println(per);//Person [name=mcc, age=20]
}
Person.java
package javaBean;
public class Person {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
JsonTest.java
@Test
public void List_JSON() {
List<Person> personList = new ArrayList<Person>();
Person per1 = new Person("1", 19);
Person per2 = new Person("2", 20);
Person per3 = new Person("3", 21);
personList.add(per1);
personList.add(per2);
personList.add(per3);
//创建Gson对象
Gson gson = new Gson();
//将List集合转换为JSON字符串
String perListJson = gson.toJson(personList);
System.out.println(perListJson);//[{"name":"1","age":19},{"name":"2","age":20},{"name":"3","age":21}]
//将json字符串转换回List集合
List<Person> perList = gson.fromJson(perListJson, new PersonListType().getType());
System.out.println(perList);//[Person [name=1, age=19], Person [name=2, age=20], Person [name=3, age=21]]
}
PersonListType.java
package json;
import java.util.ArrayList;
import com.google.gson.reflect.TypeToken;
import javaBean.Person;
/**
* 编写一个类,继承TypeToken<>类,泛型为json字符串想要转换成的List集合的类型,
* 这里的List类型为:ArrayList
* @author MCC
*
*/
public class PersonListType extends TypeToken<ArrayList<Person>>{
}
JsonTest.java
@Test
public void Map_JSON() {
Map<Integer,Person> personMap = new HashMap<Integer,Person>();
personMap.put(1, new Person("4", 20));
personMap.put(2, new Person("5", 21));
personMap.put(3, new Person("6", 22));
//创建Gson对象
Gson gson = new Gson();
//将Map集合转换为JSON字符串
String personMapJson = gson.toJson(personMap);
System.out.println(personMapJson);//{"1":{"name":"4","age":20},"2":{"name":"5","age":21},"3":{"name":"6","age":22}}
//将json字符串转换回Map集合
/*
Map perMap = gson.fromJson(personMapJson, new PersonMapType().getType());
System.out.println(perMap);//{1=Person [name=4, age=20], 2=Person [name=5, age=21], 3=Person [name=6, age=22]}
*/
//为了避免每次将JSON字符串转换为集合对象时都需要单独创建一个类,占用内存,可以使用匿名内部类来完成
Map<Integer,Person> perMap = gson.fromJson(personMapJson, new TypeToken<HashMap<Integer,Person>>() {
}.getType());
System.out.println(perMap);//{1=Person [name=4, age=20], 2=Person [name=5, age=21], 3=Person [name=6, age=22]}
}
PersonMapType.java
package json;
import java.util.HashMap;
import com.google.gson.reflect.TypeToken;
import javaBean.Person;
/**
* 编写一个类,继承TypeToken<>类,泛型为json字符串想要转换成的List集合的类型,
* 这里的Map类型为:HashMap
* @author MCC
*
*/
public class PersonMapType extends TypeToken<HashMap<Integer,Person>>{
}
ajax.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
//使用JavaScript语言发起Ajax请求,访问AjaxServlet中的ajax方法
function ajaxRequest() {
// 1、创建XMLHttpRequest
var xmlHttpRequest = new XMLHttpRequest();
// 2、调用open方法设置请求参数
xmlHttpRequest.open("GET","http://localhost:8080/json_ajax_i18n/ajaxServlet?action=ajax",true);
// 3、绑定onreadystatechange事件,处理请求完成后的操作。
xmlHttpRequest.onreadystatechange = function(){
//当满足如下条件时,才能收到响应的数据
if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200){
//new XMLHttpRequest().responseXML 获取响应的字符串
//new XMLHttpRequest().responseText 获取响应的xml数据
var respJsonString = xmlHttpRequest.responseText;
//将json字符串转换为json对象,取出里面的值,并显示
var respJsonObj = JSON.parse(respJsonString);
document.getElementById("div01").innerHTML = "姓名:"+respJsonObj.name+",年龄:"+respJsonObj.age;
}
}
// 4、调用send方法发送请求
xmlHttpRequest.send();
}
</script>
</head>
<body>
<button onclick="ajaxRequest()">ajax request</button>
<div id="div01"></div>
</body>
</html>
AjaxServlet.java
protected void ajax(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("ajax");
Person per = new Person("mcc", 20);
//将对象数据发送给其他客户端或者服务器,将该对象转换为json字符串发送
String perJson = new Gson().toJson(per);
resp.getWriter().write(perJson);
}
$.ajax(url,type,data,success,dataType);
// ajax请求
$("#ajaxBtn").click(function(){
$.ajax({
url:"http://localhost:8080/json_ajax_i18n/ajaxServlet",
//发送给服务器的数据(参数信息等)
data:"action=jQueryAjax",
type:"Get",
//success的回调函数中,必须传入一个参数,该参数用来接收ajax请求后,服务器响应的数据
success:function(msg){
$("#showInfo").html("ajax 姓名:"+msg.name+",年龄:"+msg.age);
},
//dataType表示响应的数据类型,如果为text,则需要手动转换为json对象,才可以按照上面代码输出,
//如果为json,则返回的数据已经是json对象,不需要手动转换了
dataType:"json"
});
});
$.get(url,data,callback,type)
// ajax--get请求
/*
$.get()方法和$.post()方法:参数要按顺序传入
url 请求的url地址
data 发送的数据
callback 成功的回调函数
type 返回的数据类型
*/
$("#getBtn").click(function(){
$.get("http://localhost:8080/json_ajax_i18n/ajaxServlet","action=get",
function(msg){
$("#showInfo").html("get 姓名:"+msg.name+",年龄:"+msg.age);
},"json");
});
// ajax--post请求
$("#postBtn").click(function(){
$.post("http://localhost:8080/json_ajax_i18n/ajaxServlet","action=post",
function(msg){
$("#showInfo").html("post 姓名:"+msg.name+",年龄:"+msg.age);
},"json");
});
$.getJSON(url,data,callback)
// ajax--getJson请求
/*
$.getJSON()方法
url 请求的url地址
data 发送给服务器的数据
callback 成功的回调函数
*/
$("#getJSONBtn").click(function(){
$.getJSON("http://localhost:8080/json_ajax_i18n/ajaxServlet","action=getJSON",
function(msg){
$("#showInfo").html("getJSON 姓名:"+msg.name+",年龄:"+msg.age);
});
});
serialize():获取表单中所有表单项的内容,并以 name=value&name=value 的形式进行拼接。
// serialize():获取表单中所有表单项的内容,并以 name=value&name=value 的形式进行拼接
$("#submit").click(function(){
// 表单序列化
var serialize = $("#form01").serialize();
$.getJSON("http://localhost:8080/json_ajax_i18n/ajaxServlet","action=serialize&"+serialize,
function(msg){
$("#showInfo").html("serialize 姓名:"+msg.name+",年龄:"+msg.age);
});
});
AjaxServlet.java
package ajax.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import javaBean.Person;
public class AjaxServlet extends BaseServlet{
private static final long serialVersionUID = 1L;
protected void ajax(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("ajax");
Person per = new Person("mcc", 20);
//将对象数据发送给其他客户端或者服务器,将该对象转换为json字符串发送
String perJson = new Gson().toJson(per);
resp.getWriter().write(perJson);
}
protected void jQueryAjax(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("jQueryAjax");
Person per = new Person("mcc", 20);
//将对象数据发送给其他客户端或者服务器,将该对象转换为json字符串发送
String perJson = new Gson().toJson(per);
resp.getWriter().write(perJson);
}
protected void get(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get");
Person per = new Person("mcc", 20);
//将对象数据发送给其他客户端或者服务器,将该对象转换为json字符串发送
String perJson = new Gson().toJson(per);
resp.getWriter().write(perJson);
}
protected void post(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post");
Person per = new Person("mcc", 20);
//将对象数据发送给其他客户端或者服务器,将该对象转换为json字符串发送
String perJson = new Gson().toJson(per);
resp.getWriter().write(perJson);
}
protected void getJSON(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("getJSON");
Person per = new Person("mcc", 20);
//将对象数据发送给其他客户端或者服务器,将该对象转换为json字符串发送
String perJson = new Gson().toJson(per);
resp.getWriter().write(perJson);
}
protected void serialize(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("serialize");
System.out.println("username="+req.getParameter("username")+", password="+req.getParameter("password"));
Person per = new Person("mcc", 20);
//将对象数据发送给其他客户端或者服务器,将该对象转换为json字符串发送
String perJson = new Gson().toJson(per);
resp.getWriter().write(perJson);
}
}