JavaScript Object Notation :JavaScript 对象表示法
Person p = new Person();
p.setName("");
p.setAge("");
p.setGender("");
var p = {"name":"张三","age":23,"gender":"男"};
{"person":[{},{}]}{"address":{"province":"北京"......}}{} 定义 JSON 格式[]JSON 对象.键名JSON 对象["键名"]数组对象[索引]DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON数据语法title>
<script>
// 1. 定义基本格式
var person={"name":"张三",age:23,'gender':true};
alert(person);
// 获取 name 的值
// var name=person.name;
var name=person["name"];
alert(name);
// 2. 第一种嵌套格式,{} → []
var persons={
"persons":[
{"name":"张三","age":23,"gender":true},
{"name":"李四","age":23,"gender":true},
{"name":"王五","age":23,"gender":true}]};
alert(persons);
// 获取王五的值
var name01=persons.persons[2].name;
alert(name01);
// 2. 第二种嵌套模式,[] → {}
var ps=[{"name":"张三","age":23,"gender":true},
{"name":"李四","age":23,"gender":true},
{"name":"王五","age":23,"gender":true}];
// 获取李四的值
alert(ps);
alert(ps[1].name);
// 获取 person 对象中的所有的键和值
// for in 循环
for (var key in person) {
alert(key);
alert(key+":"+person[key]);
}
// 获取 ps 中的所有值
for (var i = 0; i < ps.length; i++) {
var p=ps[i];
for (var key in p) {
alert(key+":"+p[key]);
}
}
script>
head>
<body>
body>
html>
为了实现 JSON 数据和 Java 对象的相互转换
需求:将来在网络中将 JSON 当作数据的载体进行传输
Java 对象转换为 JSON
导入依赖 jar 包,使用 Maven 框架
<dependency>
<groupId>org.wso2.orbit.com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>2.11.0.wso2v1version>
dependency>
<dependency>
<groupId>org.wso2.orbit.com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.11.0.wso2v1version>
dependency>
<dependency>
<groupId>org.wso2.orbit.com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.11.0.wso2v1version>
dependency>
public class Person {
private String name;
private int age;
private String gender;
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;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
writeValue(参数1,obj);
writeValueAsString(obj); 将对象转为 JSON 字符串public class JacksonTest {
// Java 对象转为 JSON 字符串
@Test
public void test01() throws Exception {
// 1. 创建 Person 对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
// 2. 创建 Jackson 的核心对象 ObjectMapper
ObjectMapper mapper=new ObjectMapper();
// 转换方法:
// writeValue(参数1,obj);
// 参数1:
// File:将 obj 对象转换为 JSON 字符串,并保存到指定的文件中
// Writer:将 obj 对象转换为 JSON 字符串,并将 JSON 数据填充到字符输出流中
// OutputStream:将 obj 对象转换为 JSON 字符串,并将 JSON 数据填充到字节输出流中
// writeValueAsString(obj); 将对象转为 JSON 字符串
String json = mapper.writeValueAsString(p);
// {"name":"张三","age":23,"gender":"男"}
System.out.println(json);
// writeValue,将数据写到 D:a.txt 文件中
mapper.writeValue(new File("d://a.txt"),p);
// writeValue,将数据关联到 Writer 中
mapper.writeValue(new FileWriter("d://b.txt"),p);
}
}
public class Person {
private String name;
private int age;
private String gender;
// @JsonIgnore // 忽略该属性
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
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;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
@Test
public void test02() throws Exception {
// 1. 创建 Person 对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
p.setBirthday(new Date());
// 2. 转换
ObjectMapper mapper=new ObjectMapper();
String json=mapper.writeValueAsString(p);
System.out.println(json);
}
@Test
public void test03() throws Exception {
// 1. 创建 Person 对象
Person p01 = new Person();
p01.setName("张三");
p01.setAge(23);
p01.setGender("男");
p01.setBirthday(new Date());
Person p02 = new Person();
p02.setName("张三");
p02.setAge(23);
p02.setGender("男");
p02.setBirthday(new Date());
Person p03 = new Person();
p03.setName("张三");
p03.setAge(23);
p03.setGender("男");
p03.setBirthday(new Date());
// 2. 创建 List 集合
List<Person> persons = new ArrayList<>();
persons.add(p01);
persons.add(p02);
persons.add(p03);
// 3. 转换
ObjectMapper mapper=new ObjectMapper();
String json=mapper.writeValueAsString(persons);
System.out.println(json);
}
@Test
public void test04() throws Exception {
// 1. 创建 Map 对象
Map<String,Object> map=new HashMap<String,Object>();
map.put("name","张三");
map.put("age",23);
map.put("gender","男");
// 2. 转换
ObjectMapper mapper=new ObjectMapper();
String json=mapper.writeValueAsString(map);
System.out.println(json);
}
readValue(JSON 字符串数据,Class) @Test
public void test05() throws Exception {
// 1. 初始化 JSON 字符串
String json="{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
// 2. 创建 ObjectMapper 对象
ObjectMapper mapper = new ObjectMapper();
// 3. 转换为 Java 对象 Person 对象
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
}
校验用户名是否存在
当注册某个用户应用时:注册校验
当文本输入框失去焦点后,发送 AJAX 请求,查询数据库是否存在该用户名
- 如果存在,则提示信息:此用户名太受欢迎,请更换一个
- 如果不存在,则提示信息:可用
$.get(type):将最后一个参数 type 指定为 "json"response.setContentType("application/json;charset=utf-8");DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面title>
<script src="js/jquery-3.6.1.min.js">script>
<script>
// 在页面加载完成后
$(function () {
// 给 username 绑定 blur 事件
$("#username").blur(function () {
// 获取 username 文本输入框的值
var username=$(this).val();
// 发送 AJAX 请求
// 期望服务器响应回的数据格式:{"userExist":true,"msg":"此用户名太受欢迎,请更换一个"}
// {"userExist":false,"msg":"用户名可用"}
$.get("findUserServlet",{username:username},function (data) {
// 判断 userExist 键的值是否是 true
var span=$("#s_username");
if (data.userExist){
// 用户名存在
span.css("color","red");
span.html(data.msg);
}else {
// 用户名不存在
span.css("color","green");
span.html(data.msg);
}
},"json");
})
})
script>
head>
<body>
<form>
<input type="text" id="username" name="username" placeholder="请输入用户名">
<span id="s_username">span>
<br/>
<input type="password" name="password" placeholder="请输入密码">
<input type="submit" value="注册">
form>
body>
html>
@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 获取用户名
String username=request.getParameter("username");
// 2. 调用 service 层判断用户名是否存在
// 设置响应的数据
// JSON 数据格式
// response.setContentType("application/json;charset=utf-8");
response.setContentType("text/html;charset=utf-8");
Map<String, Object> map = new HashMap<>();
if ("Tom".equals(username)){
// 存在
map.put("userExist",true);
map.put("msg","此用户名太受欢迎,请更换一个");
}else {
// 不存在
map.put("userExist",false);
map.put("msg","此用户名可用");
}
// 将 Map 转换为 JSON ,并且传递给客户端
// 将 MAP 转换为 JSON
ObjectMapper mapper = new ObjectMapper();
// 并且传递给客户端
mapper.writeValue(response.getWriter(),map);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}