JavaWeb(十一)JSON、AJAX

JSON

作用

json 是一种轻量级的数据交换格式。数据交换指的是客户端和服务器之间业务数据的传递格式。

json在JavaScript中的使用

json的定义

json是由键值对组成,并且由花括号包围,每个键由引号引起来,键和值之间使用冒号进行分割,多个键值对之间使用逗号进行分割

<script type="text/javascript">
			//1. json的定义
			var jsonObj = {
				/*1.基本数据类型*/
				"key1":13,
				"key2":"hello",
				"key3":true,
				//2. 数组
				"key3":[1,"ok",false],
				//3. json
				"key4":{
					"key4_1":99,
					"key4_2":"book"
				},
				"key5":[{
					"key5_1_1":33,
					"key5_1_2":"star"
				},"world",{
					"key5_2_1":12,
					"key5_2_2":"sky"
				}]
			};
			//2.  json的访问
			// json对象转字符串
			// json字符串转json对象
		</script>

json的访问

同对象.属性一致

json的两个常用方法

1.使用方式
json有两种存在形式:json对象、json字符串
JSON.stringify():把json对象转换为字符串

var jsonString = JSON.stringify(jsonObj);//类似Java中的toString()方法

JSON。parse():把json字符串转换为json对象
2. 应用场景
操作json数据时使用json对象
客户端和服务器之间数据交换时,使用json字符串

json在Java中的使用

导包

Google的一个gson包
https://wwa.lanzoui.com/iSYDzp7e83c

JavaBean和json的互转

 //1. javaBean 和json 的互转
    @Test
    public void test1(){
        Person person = new Person(1,"cat");
        //创建Gson对象实例
        Gson gson = new Gson();
        //gson.toJson()方法将javabean转为json字符串
        String jsonString = gson.toJson(person);
        System.out.println(jsonString);
        //gson.from(jsonString,class)将json字符串转为一个javabean
        Person fromJson = gson.fromJson(jsonString, Person.class);
        System.out.println(fromJson);
    }

List和json的互转

    //2. List和json的互转
    @Test
    public void test2(){
        List<Person> personList = new ArrayList<Person>();
        Person person1 = new Person(1,"画画");
        Person person2 = new Person(1,"运动");
        Person person3 = new Person(1,"读书");
        personList.add(person1);
        personList.add(person2);
        personList.add(person3);
        Gson gson = new Gson();
        String jsonString = gson.toJson(personList);
        /*[{"id":1,"name":"画画"},{"id":1,"name":"运动"},{"id":1,"name":"读书"}]*/
        System.out.println(jsonString);
        //转回来
        //1. 创建一个类继承TypeToken,并指定该类的泛型为返回的集合类
        /*
        public class PersonList extends TypeToken<ArrayList<Person>> {
        }
        */
        //2. gson.fromJson()第二个参数为:new 继承类.getType()
        List<Person> personList1 = gson.fromJson(jsonString, new PersonList().getType());
        System.out.println(personList1.get(0));

map和json的互转

//3. map 和json 的互转
    @Test
    public void test3(){
        Map<Integer,Person> personMap = new HashMap<Integer,Person>();
        personMap.put(1,new Person(33,"Mac"));
        personMap.put(2,new Person(12,"iphone"));
        Gson gson = new Gson();
        String personMapJsonString = gson.toJson(personMap);
        System.out.println(personMapJsonString);
        //转回去
        //继承类
        /*
        public class PersonMap extends TypeToken<HashMap<Integer, Person>> {
        }
         */
        // Map<Integer,Person> personMap1 = gson.fromJson(personMapJsonString, new PersonMap().getType());
        //匿名内部类的方式
        Map<Integer,Person> personMap1 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer,Person>>(){}.getType());

        System.out.println(personMap1.get(2));

    }

AJAX请求

什么是AJAX请求

  1. AJAX 即“Asynchronous Javascript And XML”(异步JavaScript 和XML),是指一种创建交互式网页应用的网页开发技术。
  2. ajax 是一种浏览器通过js 异步发起请求,局部更新页面的技术。
  3. Ajax 请求的局部更新,浏览器地址栏不会发生变化;局部更新不会舍弃原来页面的内容

原生AJAX请求

JQuery中的AJAX请求

$.ajax方法

  1. url 表示请求的地址
  2. type 表示请求的类型GET 或POST 请求
  3. data 表示发送给服务器的数据 格式有两种:
    一:name=value&name=value
    二:{key:value}
  4. success 请求成功,响应的回调函数
  5. dataType 响应的数据类型
    常用的数据类型有:
    (1)text 表示纯文本
    (2)xml 表示xml 数据
    (3)json 表示json 对象

示例

Servlet程序

 protected void ajaxRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("收到Ajax请求");
        Person person = new Person(0,"生而为人,我很抱歉");
        Gson gson = new Gson();
        String jsonString = gson.toJson(person);
        resp.getWriter().write(jsonString);

    }
$(function(){
				// ajax请求
				$("#ajaxBtn").click(function(){
					
					$.ajax({
						url:"http://localhost:8080/json_ajax_i18n/ajax" ,
						type: 'GET',
						data: "action=ajaxRequest",
						success:function(data){
							//alert("服务器返回的数据:"+data);
							//var jsonObj = JSON.parse(data);
							$("#msg").html("编号:"+data.id+",姓名:"+data.name);
						},
						dataType:"json"
					})
 
				});

$.get方法和$.post方法

  1. url表示请求的地址
  2. data表示发送给服务器的数据 格式有两种:
    一:name=value&name=value
    二:{key:value}
  3. callback请求成功,响应的回调函数
  4. type响应的数据类型
$("#getBtn").click(function() {

					$.get("http://localhost:8080/json_ajax_i18n/ajax", "action=ajaxRequest", function (data) {
						$("#msg").html("编号:" + data.id + ",姓名:" + data.name);
					}, "json")
				});
				
				// ajax--post请求
				$("#postBtn").click(function(){
					// post请求
					$.get("http://localhost:8080/json_ajax_i18n/ajax", "action=ajaxRequest", function (data) {
						$("#msg").html("编号:" + data.id + ",姓名:" + data.name);
					}, "json")
					
				});

getJSON方法

只有url、data和callback三个参数

$.getJSON("http://localhost:8080/json_ajax_i18n/ajax", "action=ajaxRequest", function (data) {
						$("#msg").html("编号:" + data.id + ",姓名:" + data.name);
					})

表单序列化Serialize()方法

serialize()可以把表单中所有表单项的内容都获取到,并以name=value&name=value 的形式进行拼接。
表单信息:
JavaWeb(十一)JSON、AJAX

// ajax请求
				$("#submit").click(function(){
					// 把参数序列化
					//alert($("#form01").serialize());
					$.getJSON("http://localhost:8080/json_ajax_i18n/ajax","action=jQueryAjaxSerialize&"+$("#form01").serialize(),function(data){

					})
				});
 protected void jQueryAjaxSerialize(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
    }

输出:
JavaWeb(十一)JSON、AJAX

上一篇:Gson的fromJson()方法


下一篇:Android Gson数据解析