目录
一、JSON数据交互
1、JSON概述
什么是JSON?
JSON有什么特点?
JSON的两种数据结构
1.对象结构
2.数组结构
3.(1、2组合)
2、JSON数据转换
案例
一、JSON数据交互
JSON是近几年才流行的一种新的数据格式,它与XML非常相似,都是用于存储数据的;但JSON相对于XML来说,解析速度更快,占用空间更小。因此在实际开发中,使用JSON格式的数据进行前后台的数据交互是很常见的。
1、JSON概述
什么是JSON?
JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,使用了C、C++、C#、Java、JavaScript、Perl、Python等其他语言的约定,采用完全独立于编程语言的文本格式来存储和表示数据。
JSON有什么特点?
JSON与XML非常相似,都是用来存储数据的,并且都是基于纯文本的数据格式。与XML相比,JSON解析速度更快,占用空间更小,且易于阅读和编写,同时也易于机器解析和生成。
JSON的两种数据结构
1.对象结构
在对象结构以“{”开始,以“}”结束。中间部分由0个或多个以英文“,”分隔的name:value对构成(注意name和value之间以英文“:”分隔),其存储形式如下图所示。
对象结构的语法结构代码如下:
例如:一个address对象包含城市、街道、邮编等信息,使用JSON的表示形式如下: {"city":"Beijing","street":"Xisanqi","postcode":100096}
2.数组结构
数组结构以“[”开始,以“]”结束。中间部分由0个或多个以英文“,”分隔的值的列表组成,其存储形式如下图所示。
对象结构的语法结构代码如下:
[ value1, value2, ... ]
例如,一个数组包含了String、Number、Boolean、null类型数据,使用JSON的表示形式如下:
["abc",12345,false,null]
3.(1、2组合)
对象、数组数据结构也可以分别组合构成更为复杂的数据结构。例如:一个person对象包含name、hobby和address对象,其代码表现形式如下:
{"name": "zhangsan""hobby":["篮球","羽毛球","游泳"]"address":{ "city":"Beijing" "street":"Xisanqi" "postcode":100096 }
}
注意:如果使用JSON存储单个数据(如“abc”),一定要使用数组的形式,不要使用Object形式,因为Object形式必须是“名称:值”的形式。
2、JSON数据转换
Spring提供了一个HttpMessageConverter
HttpMessageConverter
要使用MappingJackson2HttpMessageConverter对数据进行转换,就需要使用Jackson的开源包,开发时所需的开源包及其描述如下所示,下载地址:http://mvnrepository.com/artifact/com.fasterxml.jackson.core
jackson-annoations-2.8.8.jar:JSON转换注解包;jackson-core-2.8.8.jar:JSON转换核心包;jackson-databind-2.8.8.jar:JSON转换的数据绑定包。
在使用注解式开发时,需要用到2个重要的JSON格式转换注解,分别为@RequestBody和@ResponseBody,关于这两个注解的说明如下表所示:
案例
( 1)创建项目并导入相关JAR包。使用Eclipse创建一个名为chapter14的Web项目,然后将SpringMVC相关JAR包、JSON 转换包添加到项目的lib目录中,并发布到类路径下。添加后的lib目录如图所示。
(2)在 web.xml中,对 Spring MVC的前端控制器等信息进行配置,
( 3)在src目录下,创建Spring MVC的核心配置文件springmvc-config.xml,
location:用于定位需要访问的本地静态资源文件路径,具体到某个文件夹 mapping:匹配静态资源全路径,其中“/**”表示文件夹及其子文件夹下的某个具体文件
注解驱动
( 4)在src目录下,创建一个com.itheima.po包,并在包中创建一个User类,该类用于封装User类型的请求参数,
public class User { //姓名 private String username; //密码 private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [ username=" + username + ", password=" + password + "]"; }
}
(5)在WebContent目录下,创建页面文件index.jsp来测试JSON数据交互,在测试页面 index.jsp 中使用的是jQuery的AJAX进行的JSON数据提交和响应,所以还需要引入jquery.js文件。本示例是引入了WebContent目录下js文件夹中的jquery-1.11.3.min.js
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
编写了一个测试JSON交互的表单,当单击“测试JSON交互”按钮时,会执行页面中的testJson()函数。在函数中使用了 jQuery 的 AJAX方式将JSON格式的用户名和密码传递到以“/testJson”结尾的请求中。 需要注意的是,在AJAX中包含了3个特别重要的属性,其说明如下。
data:即请求时携带的数据,当使用JSON格式时,要注意编写规范。contentType:当请求数据为JSON格式时,值必须为application/json。dataType:当响应数据为JSON时,可以定义 dataType属性,并且值必须为json。其中dataType : "json"也可以省略不写,页面会自动识别响应的数据格式。
( 6)在src目录下,创建一个com.itheima.controller包,在该包下创建一个用于用户操作的控制器类UserController
@Controller public class UserController { /** *接收页面请求的JSON 数据,并返回JSON格式结果
*/ @RequestMapping("/testJson") @ResponseBody //将对象转换成json格式响应 public User testJson(@RequestBody User user) { //将数据绑定到形参user
//打印接收的JSON格式数据
System.out.println (user);
//返回JSON格式的响应 return user; } }
方法中的@RequestBody注解用于将前端请求体中的JSON格式数据绑定到形参user上,@ResponseBody注解用于直接返回User对象(当返回POJO对象时,会默认转换为JSON格式数据进行响应)。 (7)将chapter14项目发布到Tomcat 服务器并启动,在浏览器中访问地址http:/localhost:8080/chapter14/index.jsp,其显示效果如图所示。
在两个输入框中分别输入用户名“jack”和密码“123456”后,单击“测试JSON 交互”按钮,当程序正确执行时,页面中会弹出显示用户名和密码的弹出框,如图所示。
与此同时,Eclipse的控制台中也会显示相应数据,如图所示。
显示结果可以看出,编写的代码已经正确实现了JSON数据交互,可以将JSON格式的请求数据转换为方法中的Java对象,也可以将Java对象转换为JSON格式的响应数据。
好文链接
发表评论